我正试图找出Solr中分析器的正确顺序,但在搜索部分单词时没有得到任何结果。例如:
查询:Sto
期望的结果:斯德哥尔摩
查询:瑞典是
期望的结果:瑞典是欧洲城市
只有当我搜索整个意义,想要的结果时,我才会收到结果。我将感谢任何提示或提示,可能是什么问题,我已经做了迄今为止
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LengthFilterFactory" min="2" max="15"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.FlattenGraphFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LengthFilterFactory" min="2" max="15"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
您正在通过应用字段类型text general来标记文本。
为了获得部分单词匹配,您必须更改标记器。
在这种情况下,请尝试使用ngram令牌化器。N-Gram代币化器。
读取字段文本并生成给定范围内大小的n-gram标记。
工厂等级:solr。NGramTokenizerFactory
自变量:
minGramSize:(整数,默认为1(最小n-gram大小,必须>0.
maxGramSize:(整数,默认为2(最大n-gram大小,必须>=minGramSize。
示例:
默认行为。请注意,这个标记化器在整个字段上运行。它不会在空白处打断字段。结果,空间字符被包括在编码中。
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>
对于第二种情况,你会得到结果,但你正在寻找短语匹配。对于这样的文本,您需要使用text_general字段类型。也可以尝试使用ediamx并进行检查。
还有一件事,您可以在solr管理员分析页面上验证您的字段类型。
我设法找到了丢失的部分。我犯的错误是,我把字段索引为字符串。作为字符串编制索引的字段将作为短语编制索引而不进行分析。因此,我无法搜索字符串的部分单词