【发布时间】:2011-08-21 04:05:54
【问题描述】:
我有一个包含大约 20 万本书的数据库。我希望为我的用户提供一种按书名快速搜索书籍的方法。现在,有些书名可能有 A、THE 等前缀,并且书名中也可以有数字,所以搜索 12 应该匹配书名中带有“12”、“12”和“dozen”的书。这将通过 AJAX 工作,因此我需要确保数据库查询非常快。
我假设大多数用户会尝试使用标题的某些单词进行搜索,因此我正在考虑将所有标题拆分为单词并创建一个单独的数据库表,将单词映射到标题。但是,我担心这可能不会给出最好的结果。例如,书名可能是 2 或 3 个常用词,我可能会得到一个包含所有 2-3 个词的较长标题的书籍列表,而我正在寻找的那本书就像大海捞针一样丢失了。此外,搜索标题中包含许多单词的书可能会因为 OR 子句过多而减慢查询速度。
基本上,我正在寻找一种方法:
- 快速查找结果
- 按相关性对它们进行排序。
我认为这不是第一次有人需要这样的东西,我不想重新发明轮子。
附:我目前正在使用 MySQL,但如果需要,我可以切换到其他任何东西。
【问题讨论】:
-
如果我错了,请纠正我,但是您正在寻找信息检索/搜索引擎系统,对于书籍,不是吗?在这种情况下,请查看 Apache Lucene。
-
@amit,“看看 Apache Lucene”就像是在说“google it”。源代码很大,我有一个非常具体的问题。您能否指出我需要在 Lucene 中查看哪些内容?