您可以在此处使用 Shingle 过滤器。
此过滤器从令牌流构造带状疱疹,它们是令牌 n-gram。它将一系列令牌组合成一个令牌。
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory"/>
</analyzer>
在:"To be, or what?"
要过滤的标记器:"To"(1), "be"(2), "or"(3), "what"(4)
输出:"To"(1), "To be"(1), "be"(2), "be or"(2), "or"(3), "or what"(3), "what"(4)
您也使用以下属性。
maxShingleSize :(整数,必须 >= minShingleSize,默认 2)每个 shingle 的最大令牌数。
我尝试了您要求的文本。
这是应用的字段类型。
<fieldType name="text_tokens" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="4" outputUnigrams="true"/>
</analyzer>
</fieldType>
预期的输出是:
Unigram: "Welcome", "to", "Apache", "Solr"
Bigram: "Welcome to", "to Apache", "Apache Solr"
Trigram: "Welcome to Apache", "to Apache Solr"
应用上述字段类型后给出的输出是:
这里涵盖了所有预期的标记,例如
unigram : Welcome, to , Apache , Solr
bigram : Welcome to , to Apache, Apache Solr
trigram : Welcome to Apache , to Apache Solr
更多详情请参考以下链接。
Shingle Filter Example