gpt4 book ai didi

elasticsearch - 在 ElasticSearch 中忽略撇号(所有格)

转载 作者:行者123 更新时间:2023-11-29 02:55:20 27 4
gpt4 key购买 nike

我试图让用户提交查询“Joe Frankles”、“Joe Frankle”、“Joe Frankle's”以匹配原始文本“Joe Frankle's”。现在我们正在索引这个文本所在的字段(轮胎/ ruby 格式):

{ :type => 'string', :analyzer => 'snowball' }

并搜索:

query { string downcased_query, :default_operator => 'AND' }

我试过这个失败了:

          create :settings => {
:analysis => {
:char_filter => {
:remove_accents => {
:type => "mapping",
:mappings => ["`=>", "'=>"]
}
},
:analyzer => {
:myanalyzer => {
:type => 'custom',
:tokenizer => 'standard',
:char_filter => ['remove_accents'],
:filter => ['standard', 'lowercase', 'stop', 'snowball', 'ngram']
}
},
:default => {
:type => 'myanalyzer'
}
}
},

最佳答案

有两种处理所有格撇号的官方方法:

1) 使用 ES 文档中描述的“possessive_english”词干分析器: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html

例子:

{
"index" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "my_stemmer"]
}
},
"filter" : {
"my_stemmer" : {
"type" : "stemmer",
"name" : "possessive_english"
}
}
}
}
}

如果您愿意,除了“possessive_english”过滤器之外,还可以使用其他词干提取器或滚雪球。应该/必须工作,但它是未经测试的代码。

2) 使用“word_delimiter”过滤器:

{
"index" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "my_word_delimiter"]
}
},
"filter" : {
"my_word_delimiter" : {
"type" : "word_delimiter",
"preserve_original": "true"
}
}
}
}
}

对我有用 :-) ES 文档: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html

两者都会切断“的”。

关于elasticsearch - 在 ElasticSearch 中忽略撇号(所有格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com