首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr中每个查询项的模糊匹配

Solr中每个查询项的模糊匹配
EN

Stack Overflow用户
提问于 2012-12-31 01:05:55
回答 1查看 1.7K关注 0票数 0

由于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. 蛮力:假设这些术语是由空格分隔的,所以只需解析查询并在每个空格之前附加一个倾斜符(即。每学期之后)
  2. 两个步骤:打开查询调试,将查询发送到Solr。这将给出由Solr解析的查询术语列表。然后,我可以从调试输出中提取术语,追加tilde操作符并使用添加的tilde运算符重新运行查询。
  3. 内部:连接到搜索请求处理程序,并在查询被解析为术语后追加tilde操作符。

方法1很难闻,因为它完全绕过了Solr的查询解析,所以我不想这样做。如果两次解析查询的成本不太高,那么方法2听起来是可行的。方法3听起来恰到好处,但我还没有弄清楚我必须连接到处理链的位置。

也许有一种完全不同的方式来实现我想做的事情,或者这只是我的一个愚蠢的想法。不管怎么说,我真的很感谢你的指点,也许其他人已经做过这样的事情了。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-12-31 06:00:39

我建议采用以下方法:

  1. 在应用程序中实现查询处理程序模块,在其中可以从输入用户查询构建solr查询。这样,SOLR端不会发生任何更改,并且您的应用程序对SOLR中的内容拥有所有的控制。
  2. 实现您自己的查询解析器,您可以从标准SOLR查询解析器(org.apache.solr.search.QParser)开始并进行更改。您的应用程序只需选择自定义查询解析器和rest,您的实现就应该小心。

我更喜欢方法1,因为这使得系统对SOLR升级完全不知情,任何Solr的新版本都不需要我更新自定义的q解析器,您也不必在新版本中更新/构建和设置自定义q解析器。

如果您对该应用程序没有任何控制,并且不想通过q解析器路由,那么您可以实现一个Servlet过滤器,在将solr查询发送到solr请求筛选器之前转换它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14096393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档