Solr 词干与模糊 returns 0 个结果
Solr stemming together with fuzziness returns 0 results
- SOLR 6.4.1
我们正面临 solr 模糊性和通过 German2 的 SnowballPorterFilterFactory 进行词干提取的问题。
<fieldType name="text_de_de" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_de.txt" ignoreCase="true"/>
<filter class="solr.ManagedStopFilterFactory" managed="de_DE"/>
<filter class="solr.SynonymFilterFactory" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.ManagedSynonymFilterFactory" managed="de_DE"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1"
generateWordParts="1" generateNumberParts="1" catenateWords="1"
catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2"/>
</analyzer>
</fieldType>
此外,在我们的查询配置中,我们添加“~”以表示模糊。
{q=field_text_de_de_mv:XYZ~}
作为查询解析器,标准查询解析又名。使用了卢塞恩。
首先,我们的假设是在通过 SnowballPorter 提取词干之前应用模糊性。含义:
SearchTerm: Xyzker ->(query) Xyzker~ (check for (XyzKer, XyzXer, Xyzer etc..)) -> stem(Xyzxer, Xyzxer... ) HIT -> deliver result
这是正确的吗?
是否有任何建议使用带或不带词干提取的模糊性 (https://lucene.apache.org/solr/guide/6_6/the-standard-query-parser.html#TheStandardQueryParser-FuzzySearches)?
现在进入实际行为:
使用字段类型 text_de_de 编制索引 "Xyzker",因此应用了词干提取。
查询 "Xzyser"(包含一个 k 的拼写错误)。
预期结果:当模糊度默认为 (~) 时,命中 "Xyzker"。
我们得到 0 个结果。有人可以详细说明吗?还是给点hints/readings?我已经查看了 Solr 的运行情况。
谢谢!
当您进行模糊搜索(或通配符搜索等 - 对一个术语的任何搜索都可能在索引端评估为多个标记)时,不应用分析链([=10 除外) =],通常是 LowercaseFilter,仅此而已。
解决方案通常是在标记进入的过程中对其进行规范化,可能是通过针对您正在搜索的数据编写的特定过滤器。
- SOLR 6.4.1
我们正面临 solr 模糊性和通过 German2 的 SnowballPorterFilterFactory 进行词干提取的问题。
<fieldType name="text_de_de" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_de.txt" ignoreCase="true"/>
<filter class="solr.ManagedStopFilterFactory" managed="de_DE"/>
<filter class="solr.SynonymFilterFactory" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.ManagedSynonymFilterFactory" managed="de_DE"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1"
generateWordParts="1" generateNumberParts="1" catenateWords="1"
catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="German2"/>
</analyzer>
</fieldType>
此外,在我们的查询配置中,我们添加“~”以表示模糊。
{q=field_text_de_de_mv:XYZ~}
作为查询解析器,标准查询解析又名。使用了卢塞恩。
首先,我们的假设是在通过 SnowballPorter 提取词干之前应用模糊性。含义:
SearchTerm: Xyzker ->(query) Xyzker~ (check for (XyzKer, XyzXer, Xyzer etc..)) -> stem(Xyzxer, Xyzxer... ) HIT -> deliver result
这是正确的吗? 是否有任何建议使用带或不带词干提取的模糊性 (https://lucene.apache.org/solr/guide/6_6/the-standard-query-parser.html#TheStandardQueryParser-FuzzySearches)?
现在进入实际行为:
使用字段类型 text_de_de 编制索引 "Xyzker",因此应用了词干提取。 查询 "Xzyser"(包含一个 k 的拼写错误)。 预期结果:当模糊度默认为 (~) 时,命中 "Xyzker"。
我们得到 0 个结果。有人可以详细说明吗?还是给点hints/readings?我已经查看了 Solr 的运行情况。
谢谢!
当您进行模糊搜索(或通配符搜索等 - 对一个术语的任何搜索都可能在索引端评估为多个标记)时,不应用分析链([=10 除外) =],通常是 LowercaseFilter,仅此而已。
解决方案通常是在标记进入的过程中对其进行规范化,可能是通过针对您正在搜索的数据编写的特定过滤器。