Apache solr 模糊搜索,距离参数为2

Kam*_*jay 5 debugging solr java-11

环境-java版本“11.0.12”2021-07-20 LTS,solr-8.9.0

我已经在 solr 中加载了一个 csv 文件。csv 文件有一个字段“名称”。solr 中“名称”列的类型定义为“text_general”。

据我所知,要执行模糊搜索,请在单个单词术语末尾使用波形符 ~ 符号。距离参数的默认值为2。

我使用了以下模糊搜索查询

http://localhost:8983/solr/startsolr/select?indent=on&wt=json&q=(Name:'Ellyse~') AND (Name:'Perry~')&sort=field(Name) asc
Run Code Online (Sandbox Code Playgroud)

上述模糊搜索查询的结果名称为“Ellysea Perry”、“Ellys Perry”

但是为什么上面的查询没有给出具有以下名称“Elly Perry”的文档(因为默认距离参数为 2 并且 2 个字符 (se) 不存在。)

editDistance 为 '2' 的字符串应该出现在输出中(例如 'Elly Perry')。

我理解“最大编辑距离为 2 时,我最多可以进行 2 次插入、删除或替换”。

Name available in loaded data - 'Elly Perry'
Input query parameter - (Name:'Ellyse~') AND (Name:'Perry~')
Run Code Online (Sandbox Code Playgroud)

因为从名字“Ellyse”中删除 2 个字符后,它就变成了“Elly”。所以它应该会产生输出。有人可以帮我找到丢失的部分吗? https://en.wikipedia.org/wiki/Levenshtein_distance

我希望以下行匹配:

'Ellysea Perry',
'Ellys Perry', 
'Elly Perry'
Run Code Online (Sandbox Code Playgroud)

但只能得到以下两个

'Ellysea Perry',
'Ellys Perry'
Run Code Online (Sandbox Code Playgroud)

“名称”字段在托管架构中配置如下 -

<field name="Name" type="text_general" multiValued="false" indexed="true" stored="true" required="true"/>
Run Code Online (Sandbox Code Playgroud)

FieldType 'text_general' 描述如下-

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
Run Code Online (Sandbox Code Playgroud)

根据文档===>“要执行模糊搜索,请在单个单词术语的末尾使用波形符 ~ 符号。”。

参考资料 - https://solr.apache.org/guide/8_5/the-standard-query-parser.html#TheStandardQueryParser-FuzzySearches

尽量说得更清楚,我对这个问题缺乏想法,即使它听起来像一个经典:我花了几个小时尝试解决这个问题,但一无所获。

我已经解决了错误,现在它正在编辑距离:2

修改后的查询如下:-

http://localhost:8983/solr/startsolr/select?indent=on&wt=json&q=(Name:Ellyse~) AND (Name:Perry~)&sort=field(Name) asc
Run Code Online (Sandbox Code Playgroud)

但更进一步 - 我已经在 solr 中索引了 1600 万条记录,但是模糊搜索不适用于具有 40K 记录的特定标记。在其余情况下它的工作原理。

我应该在 solr-config.xml 文件中配置一些参数吗?