尝试在您的字段定义中使用 PorterStemFilterFactory。
<filter class="solr.PorterStemFilterFactory"/>
您的定义可能如下所示:
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory "/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
这是输入和输出:
在:“跳跳跳”
要过滤的分词器:“跳”,“跳”,“跳”
出去:“跳”,“跳”,“跳”
还有另一种替代方法,称为 solr.KStemFilterFactory,它的攻击性较低。
我的意思是简而言之,您可以为您的字段定义字段类型,如下所示。
<fieldType name="StemmerFieldTypeDef" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
通过为您的字段定义,可以决定在索引时如何存储文本以及在查询时要查询的文本。
分词器和过滤器根据您的字段定义改变您的原始文本。
例如,如果您对“Travelling”这个词进行索引,它会被索引为“travel”,因此当您使用“travel”这个词进行搜索时,它将匹配并且您会在结果中获得记录。
反之亦然。就像如果您将文本索引为“旅行”,那么它将根据字段定义被索引为“旅行”。在这里,如果您搜索的文本是“Travelling”,那么根据字段定义,它会被搜索为“travel”。因此找到匹配项。
要学习并更好地理解此分析,请查看 solr 分析页面。
在上面的示例中,In、Out 是字段输入的示例,根据应用于字段的字段类型,您将获得输出。