Apache Solr 词级 ngram

Apache Solr word level ngram

我必须为词级 ngram(uni、bi 和 trigram)配置 Solr。例如,如果输入(索引或查询)如下:

“欢迎使用 Apache Solr” 它应该标记为

Unigram: "Welcome", "to", "Apache", "Solr"
Bigram: "Welcome to", "to Apache", "Apache Solr"
Trigram: "Welcome to Apache", "to Apache Solr"

我应该如何从 Solr 获取它。我查阅了Solr的默认指南,我没有找到单词级别tokenizer

您可以在此处使用 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 :(整数,必须 >= minShigleSize,默认为 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

更多详情请参考下方link。 Shingle Filter Example