您的问题与您使用的分析仪无关。当您搜索 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 并测试新的模糊查询是如何工作的。
http://wiki.apache.org/solr/NightlyBuilds
尽管主干很稳定,但不建议用于生产用途。我可以建议你两种类似的方法:
1 - 拼写检查器
http://wiki.apache.org/solr/SpellCheckComponent
http://www.lucidimagination.com/blog/2010/08/31/getting-started-spell-checking-with-apache-lucene-and-solr/
SpellChecker 使用 n-gram 构建其小型索引,以便执行快速查找。它也使用 Levenshtein 距离,但不是迭代所有术语,而是仅计算相关术语的距离。
您需要先对“Californa”执行拼写检查,它会建议您使用“Californa”。然后,您可以在主索引的查询中使用“California”,而无需进行模糊查询。
2- 自动建议
http://wiki.apache.org/solr/Suggester
您可以使用建议器组件提供正确的拼写作为用户类型查询。这会快很多。它支持 JaspellLookup 类的模糊搜索。JaspellLookup 需要更新以启用模糊搜索。Wiki 并没有说太多关于需要更新的内容。如果 usePrefix 设置为 false,我猜它应该执行模糊查找。