【问题标题】:Solr - How to tokenize words in a string in a compounding "word-1, word-1 + word-2, word-1 + word-2 ... word-n" manner?Solr - 如何以复合“word-1,word-1 + word-2,word-1 + word-2 ... word-n”的方式标记字符串中的单词?
【发布时间】:2020-10-22 23:47:10
【问题描述】:

我想对Best Beat Makers 之类的字符串进行标记,以几乎类似于 NGram 的方式为每个单词生成标记,例如:

IN:  "Best Beat Makers"
OUT: ["Best", "Beat", "Makers", "Best Beat", "Best Beat Makers"]
                                     ^               ^
                                     |               |
                              How can I generate these tokens?

结果应该包含"Beat Makers",因为我只想以复合方式(例如word1、word1 + word2、word1 + word2 + word3等)而不是组合(例如 word1、word1 + word2、word2 + word3 等)。

目前,我只能使用StandardTokenizerFactoryClassicTokenizerFactory 生成前三个标记,而传统的NGramTokenizerFactory 仅适用于单词的字符(并且在索引方面有点昂贵)。

我考虑过的一个选项是使用StandardTokenizerFactory 获取前三个令牌,然后创建一个copyField 到另一个字段,该字段使用PatternTokenizerFactory 并定义了一个正则表达式来获取最后两个令牌,但我会如果可能的话,更愿意只使用一个字段来获取我需要的令牌。

如果您更熟悉 ElasticSearch,我仍然想听听您的想法,因为 Solr 和 ES 之间的分词器或多或少相似,可能会将我推向正确的方向。谢谢!

【问题讨论】:

    标签: search solr tokenize


    【解决方案1】:

    Shingle Filter : 此过滤器从令牌流构造带状疱疹,它们是令牌 n-gram。它将一系列令牌组合成一个令牌。

    您也使用以下属性。

    maxShingleSize :(整数,必须 >= minShingleSize,默认 2)每个 shingle 的最大令牌数。

    这是应用的字段类型。

    <fieldType name="text_tokens" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory"/>
                <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true"/>
            </analyzer>
        </fieldType>
    

    输入是:"Welcome to Apache Solr"

    预期的输出是:

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

    以下是你分享的文字分析。

    输入是:Best Beat Makers

    【讨论】:

    • 谢谢你,我最终实现了这个方法,它对我来说效果很好!
    猜你喜欢
    • 2020-08-27
    • 2020-04-30
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多