【问题标题】:mysql not a good search enginemysql不是一个好的搜索引擎
【发布时间】:2011-03-02 18:47:32
【问题描述】:

我正在尝试为我们的图书馆创建一个搜索引擎。目前我有表调用 book_tittle 列包含:

id (int)
book_tittle (varchar 256)
book_description (varchar 256)
author_id

当有人搜索书名时,例如他输入:“大鸟”,我只是从表中搜索 book_title like '%big bird%'

如果我有一本名为“big bird fly”的书,这个简单的查询就足够了,但不幸的是,当我有一本名为“big blue bird”的书时,查询将不会返回任何内容。

有人可以建议我如何解决它吗?这样如果有人搜索“大鸟”,他会得到“大鸟飞”和“大蓝鸟”书。

【问题讨论】:

    标签: mysql full-text-search search-engine


    【解决方案1】:

    如果您将字段修改为 TEXT 字段而不是 VARCHAR,则可以使用 FULLTEXT 索引。然后,您可以使用 MATCH 而不是 LIKE 来匹配字符串。这场比赛更加灵活。您可以匹配big bird 以匹配单词bigbird,或者如果要将单词匹配在一起,您可以匹配"big bird"。您还可以使用通配符,例如bir* 来匹配birdbirth

    【讨论】:

    【解决方案2】:

    您应该使用搜索引擎。查看Lucene。它适用于 PHP、.NET、Java 等。

    【讨论】:

    • 感谢您的回答。是的,我有一点同意你的看法。但真正的问题是我还需要将书名与作者姓名联系起来。那么,像 lucene 这样的搜索引擎能否在标题和作者姓名中找到“大鸟”,例如“matt%”?
    【解决方案3】:

    你可以像这样重写你的查询:

    WHERE book_title LIKE '%big%' AND book_title LIKE '%bird%'
    

    这可以在您的代码中轻松完成。我不知道你的书桌有多大,全文索引可能会更快。

    MySQL也可以implement全文,需要用到MyISAM引擎。 Lucene 的效率更高。

    【讨论】:

    • 如果用户输入很多单词,那会很困难而且很慢吗?例如,当用户输入:“big bird fly together”,那么我应该创建 WHERE book_title LIKE '%big%' AND book_title LIKE '%bird%' and book_title LIKE '%fly%'and book_title LIKE '%together%' any其他想法?
    • 阿里,没错。这不是最有效的方法。但是如果你在 book_title 上使用索引,它是可以接受的。这取决于你的表的大小。如果它非常大(十万条记录),我会寻找另一种解决方案。
    【解决方案4】:

    你是对的 - 关系数据库不能成为好的搜索引擎。

    你需要像 Lucene 这样的东西。您必须要求它为您的数据编制索引,以便进行搜索。

    【讨论】:

      【解决方案5】:

      你试过MySQL的built-in fulltext support吗?

      【讨论】:

        猜你喜欢
        • 2012-10-20
        • 2013-09-03
        • 1970-01-01
        • 2011-08-31
        • 2014-04-28
        • 2021-06-12
        • 2012-03-21
        • 2011-04-12
        相关资源
        最近更新 更多