Rav*_*avi 14 solr fuzzy-search
我正在尝试模糊搜索"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>
Run Code Online (Sandbox Code Playgroud)
以下是响应后对我有用的配置.谢谢!
<!-- 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>
Run Code Online (Sandbox Code Playgroud)
Wal*_*ood 20
不,你不需要启用词干,使用词干分析器可能会导致问题.
您在文本字段上有太多过滤器.你正在将一个单词转换为一个Porter词干,这通常不是一个真正的单词,然后取出它的语音键.表面词很少与索引中存储的语音键匹配.语音键与原始词非常不同.
使用管理UI中的分析器页面查看术语的处理方式.
我建议将各种近似匹配分成不同的字段.
使用模糊匹配与text_exact,因为它处理键入错误.不要对其他字段使用模糊.
您可以对这些字段进行不同的加权,完全匹配是比其他字段更高质量的匹配,因此它可以具有更大的权重.词干匹配是比语音更好的匹配,因此它应该具有小于精确的重量,但是比语音大.
| 归档时间: |
|
| 查看次数: |
22583 次 |
| 最近记录: |