【问题标题】:Apache Solr word level ngramApache Solr 词级 ngram
【发布时间】:2020-07-20 07:34:02
【问题描述】:

我必须为单词级别的 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

【问题讨论】:

  • 我更新了答案...请检查。

标签: solr lucene n-gram


【解决方案1】:

您可以在此处使用 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

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多