gpt4 book ai didi

Solr 模糊搜索相似词

转载 作者:行者123 更新时间:2023-12-03 21:48:19 34 4
gpt4 key购买 nike

我正在尝试对“jahngir”~ 0.2 进行模糊搜索,但不会返回任何结果。我的索引有数据“JAHANGIR RAHMAN MD”的记录。如果我尝试使用确切的单词“jahangir”~0.2 进行搜索,它会起作用。有人可以帮忙吗,我做错了什么。我花了很多时间试图弄清楚 Solr Fuzzy 搜索是如何工作的。任何解释 Solr 模糊搜索的链接都会有所帮助。下面是我用于索引的文本字段。提前致谢。

 <fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="false"/>
</analyzer>
</fieldType>

这是响应后对我有用的配置。谢谢!
<!-- Modified to fit fuzzy queries -->  
<fieldType name="text_exact_fuzzy" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

最佳答案

不,您不需要启用词干提取,使用词干提取器可能会导致问题。

文本字段上的过滤器太多了。您正在将一个单词转换为 Porter 词干,这通常不是一个真正的单词,然后使用它的语音键。表面词很少会匹配存储在索引中的语音键。音标将与原始单词大不相同。

使用管理 UI 中的分析器页面查看术语的处理方式。

我建议将近似匹配的种类分成不同的字段。

  • text_exact:小写,就是这样
  • text_stem:小写和词干
  • text_phonetic:小写和双元音,不干

  • 将模糊匹配与 text_exact 结合使用,因为它可以处理输入错误。不要对其他字段使用模糊。

    您可以对这些字段进行不同的加权,完全匹配的匹配质量高于其他字段,因此它可以具有更大的权重。词干匹配比语音匹配更好,因此它的权重应该小于精确匹配,但大于语音匹配。

    关于Solr 模糊搜索相似词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883151/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com