【问题标题】:Solr Fuzzy search (max 2 edits)Solr 模糊搜索(最多 2 次编辑)
【发布时间】:2016-06-18 08:29:41
【问题描述】:

我正在使用 Solr 6.0.0

我将数据驱动配置用于与配置相关的目的。大部分配置都是标准配置。

我在 Solr 中有一个文档

名称:“aquickbrownfox”

现在,如果我进行模糊搜索,例如:

名称:aquickbrownfo~0.7 或者 名称:aquickbrownf~0.7

它列出了结果中的记录。

但如果我进行如下搜索:

姓名:aquickbrown~0.7

它没有列出记录。

它是否必须与 solrconfig.xml 中设置为 2 的 ma​​xEdits 做些什么?

我尝试增加它。但我无法使用此配置创建集合。它给出了一个错误:

错误:创建 SolrCore 'my-search' 时出错:无法创建核心 [my-search] 原因:maxEdits 无效

Max 2 Edits 似乎是一个严重的限制。我想知道在 ~ 运算符之后传递小数值有什么用。

我的用例:

我有一个联系人数据库。我应该根据三个参数检测重复项:姓名、电子邮件和电话。所以我依靠 Solr 进行模糊搜索。电子邮件和电话相对容易使用简单的假设。名字似乎有点棘手。对于名称中的每个单词,我计划进行模糊搜索。我希望 ~ 之后的可选参数可以在没有 maxEdit 距离限制的情况下工作。

【问题讨论】:

    标签: search solr fuzzy


    【解决方案1】:

    文档不再建议在波浪号后使用小数值 - 有关详细信息,请参阅 http://lucene.apache.org/core/4_6_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#Fuzzy_Searches

    但是,您是正确的,为了执行模糊搜索,只允许对搜索字符串进行 2 次更改。我猜这个限制在效率和实用性之间取得了平衡。

    solrconfig.xml 中的 ma​​xEdits 参数适用于 DirectSpellChecker 配置,不会影响您的搜索,除非您使用拼写检查器。

    对于您的用例,您最好的方法可能是使用不同的字段配置对名称字段进行两次索引:一次使用一组简单的分析器和过滤器(即 StandardTokenizerFactory、StandardFilterFactory、LowerCaseFilterFactory),另一次使用拼音匹配器,例如Beider-Morse filter。您可以使用第一个字段进行模糊搜索,使用第二个版本查找可能拼写不同但听起来与正在检查的名称相同的名称。

    【讨论】:

    • 哦!这是令人失望的。那么如何搜索 editDistance 为 >2 的字符串?还有办法吗?
    • 您搜索的目的是什么?上面的查询看起来像您正在执行自动完成,但是从这么多字符开始的很长的单词上自动完成(相对)是不寻常的。如果你真的想要更大的编辑距离,Lucene javadoc 中的建议是使用 ngrams。
    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 2013-05-15
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2015-09-18
    相关资源
    最近更新 更多