由于Levenshtein实现了Lucene 4,声称比以前快了100倍(http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html),我想对查询中的所有术语进行模糊匹配。这个想法是,搜索‘绿色软管’应该能够找到文件‘绿色之屋’(我并不真正关心短语,在这里,引号只是为了使这更易读)。
我正在使用Lucene 4 + Solr 4。由于我正在进行一些前后处理,在Solr周围有一个小包装servlet,servlet使用SolrJ来最终访问Solr。
我现在有点迷茫,什么是正确的方式来实现这一点。我的基本方法是将搜索查询分解为术语,并在每个术语中附加倾斜/模糊运算符。这样,“绿色软管”就会变成“绿色软管”。现在的问题是如何正确地做到这一点。我可以看到几种方式:
方法1很难闻,因为它完全绕过了Solr的查询解析,所以我不想这样做。如果两次解析查询的成本不太高,那么方法2听起来是可行的。方法3听起来恰到好处,但我还没有弄清楚我必须连接到处理链的位置。
也许有一种完全不同的方式来实现我想做的事情,或者这只是我的一个愚蠢的想法。不管怎么说,我真的很感谢你的指点,也许其他人已经做过这样的事情了。谢谢!
发布于 2012-12-31 06:00:39
我建议采用以下方法:
我更喜欢方法1,因为这使得系统对SOLR升级完全不知情,任何Solr的新版本都不需要我更新自定义的q解析器,您也不必在新版本中更新/构建和设置自定义q解析器。
如果您对该应用程序没有任何控制,并且不想通过q解析器路由,那么您可以实现一个Servlet过滤器,在将solr查询发送到solr请求筛选器之前转换它。
https://stackoverflow.com/questions/14096393
复制相似问题