超快速部分文本匹配的数据库/语言选项

时间:2013-01-25 12:46:26

标签: php python database performance search

我正在构建一个项目,并且需要一种超快速的方法来提供基于部分文本匹配的结果的自动完成源。

我将仅对数据库中的一个字段进行索引/搜索,但数据库行将包含其他数据,我不会将这些字段编入索引。我会有约。 25k行。

要求:

  • 必须匹配该领域的任何地方(Lorem Ipsum Dolor Sit Amet在开始输入“Lor”,“Ipsum”,“olor”,“Sit Amet”时会被找到)
  • 需要非常快速地返回JSON Feed中的结果(尽管数据的原始来源并不重要)
  • 高流量的可扩展解决方案

我已经审查了几个选项......

  • 使用像like query in mongoDB
  • 这样的MongoDB
  • ElasticSearch - 不确定我需要做什么有点矫枉过正,并且没有看到任何与上述部分文本匹配的问题
  • SQL LIKE查询,但想象这不会快得多吗?

编程语言不是一个问题,但Python或PHP将是首选。

2 个答案:

答案 0 :(得分:1)

这听起来像是典型的全文搜索。根据您的应用程序和数据所在的数据库,进程内whoosh可能会满足您的需求(如Lucene for Java)。

你说得对,SQL LIKE查询与实际的全文索引相比会表现得非常糟糕。 MongoDB可能也不是很合适,但是可以调整大致按照你的建议做。

答案 1 :(得分:1)

正如其他人所提到的,执行语言和句法分析(标记化,词干化,大小写和重音标准化等)的全文索引将为您提供最佳结果。但是,如果没有一定的设置和配置,就不会有这种情况。

查看Solr的建议组件:http://wiki.apache.org/solr/Suggester,还有一个新组件 - 我认为它叫做AnalyticsSuggester或者其他一些,我认为它只适用于Lucene,所以如果你想要一个内存解决方案你可以使用它(仅限Java)。