Solr/Lucene模糊搜索太慢

Solr/Lucene模糊搜索太慢,solr,full-text-search,search-engine,lucene,Solr,Full Text Search,Search Engine,Lucene,我正在尝试使用Solr服务器实现位置(城市、地区、国家、对象)模糊搜索。目前,我的索引包含大约0.8-1.0 M项。使用模糊搜索(~0.7)时效果非常好,但对我来说太慢了(通常为0.2-0.6秒)。使用的标记器是。作为另一种选择,我尝试了——它的性能非常好(大约快100倍),但它不提供模糊搜索:( 你知道我可以使用什么不同的方法吗?我想使用模糊搜索功能,但如果可能的话,可以用更快的方式 非常感谢!您的问题与您使用的分析器无关。当您搜索Califrna时,0.7 Lucene会迭代索引中的所有术语

我正在尝试使用Solr服务器实现位置(城市、地区、国家、对象)模糊搜索。目前,我的索引包含大约0.8-1.0 M项。使用模糊搜索(~0.7)时效果非常好,但对我来说太慢了(通常为0.2-0.6秒)。使用的标记器是
。作为另一种选择,我尝试了
——它的性能非常好(大约快100倍),但它不提供模糊搜索:(

你知道我可以使用什么不同的方法吗?我想使用模糊搜索功能,但如果可能的话,可以用更快的方式


非常感谢!

您的问题与您使用的分析器无关。当您搜索Califrna时,0.7 Lucene会迭代索引中的所有术语,并计算“Califrna”和所有术语之间的(Levenshtein)编辑距离。这是一个非常昂贵的操作

这个问题将通过Lucene版本4.0解决。不幸的是,Solr附带的Lucene版本使用的是旧的暴力方法

https://issues.apache.org/jira/browse/LUCENE-2089

http://java.dzone.com/news/lucenes-fuzzyquery-100-times

如果您觉得合适的话,我建议您从trunk下载Solr/Lucene并测试新的模糊查询是如何工作的

尽管主干是稳定的,但不建议在生产中使用。我可以向您推荐两种类似的方法:

1-拼写检查器

http://www.lucidimagination.com/blog/2010/08/31/getting-started-拼写检查-with-apache-lucene-and-solr/

SpellChecker使用n-gram建立小索引,以执行快速查找。它也使用Levenshtein距离,但不是对所有项进行迭代,而是只对相关项计算距离

您需要首先对“Californa”执行拼写检查,它会建议您使用“Californa”。然后您可以在主索引的查询中使用“Californa”,而无需模糊查询

2-自动建议

http://wiki.apache.org/solr/Suggester


您可以使用suggester组件提供正确的拼写作为用户类型查询。这将快得多。它支持JaspellLookup类的模糊搜索。JaspellLookup需要更新才能启用模糊搜索。Wiki没有说明需要更新的内容。如果usePrefix设置为false,则应执行模糊搜索p我猜。

你能提供一个你正在寻找的模糊搜索的例子吗?我的意思是假设用户在q=California~中键入,那么你的结果应该是什么样的?当然。作为一个很好的例子,我会说名称:“Guadelpe”~0.7匹配“Guageloupe”。在第一种情况下(StandardTokenizer)它之所以有效,是因为它将单词标记为较短的标记。对于WhitespaceTokenizer,每个标记实际上都是一个单词。索引更小,因此速度更快,但相关性更差。你认为呢?