首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr -如何在字符串中以复合" word-1,word-1 + word-2,word-1+ word-2 . word-n“的方式标记单词?

Solr -如何在字符串中以复合" word-1,word-1 + word-2,word-1+ word-2 . word-n“的方式标记单词?
EN

Stack Overflow用户
提问于 2020-10-22 23:47:10
回答 1查看 343关注 0票数 3

我希望标记一个字符串,例如Best Beat Makers,以几乎像NGram一样的方式生成每个字的标记,例如:

代码语言:javascript
复制
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之间的标记器或多或少是相似的,可能会将我推向正确的方向。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 00:56:41

Shingle Filter:这个过滤器从令牌流构造出标记n克的标记块.它将运行的令牌组合成一个令牌。

您还可以使用下面的属性。

maxShingleSize : (整数,必须是>= minShingleSize,默认值2)每个标记的最大数目。

以下是应用的字段类型。

代码语言:javascript
复制
<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"

预期产出如下:

代码语言:javascript
复制
Unigram: "Welcome", "to", "Apache", "Solr"
Bigram: "Welcome to", "to Apache", "Apache Solr"
Trigram: "Welcome to Apache", "to Apache Solr"

下面是你的分析,你分享的文本。

输入是:Best Beat Makers

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64492024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档