gpt4 book ai didi

elasticsearch - 在带有特殊字符的自定义关键字字段上使用字词查询时出现意外结果

转载 作者:行者123 更新时间:2023-12-03 01:19:18 25 4
gpt4 key购买 nike

我有一个具有以下字段的索引:

myField: {
type: "text",
fields: {
keyword: {
type: "keyword",
ignore_above: 256
},
keyword_lowercase: {
type: "text",
analyzer: "lowercase_keyword_analyzer",
fielddata: true
}
},
analyzer: "autocomplete_analyzer",
search_analyzer: "autocomplete_search_analyzer"
},

分析仪:
lowercase_keyword_analyzer: {
filter: [
"lowercase",
"asciifolding"
],
type: "custom",
tokenizer: "keyword"
},
autocomplete_search_analyzer: {
filter: [
"lowercase",
"asciifolding"
],
type: "custom",
tokenizer: "standard"
},
autocomplete_analyzer: {
filter: [
"lowercase",
"asciifolding",
"autocomplete_edge_ngram"
],
type: "custom",
tokenizer: "standard"
}

我有一个值如下的文档:L'OCCITANE

MATCH查询:
"query": {
"bool": {
"should": [
{
"match": {
"myField.keyword_lowercase": {
"query": "l’occitane"
}
}
}]
}
}

找到它,但是一个TERM查询:
"query": {
"bool": {
"should": [
{
"term": {
"myField.keyword_lowercase": {
"value": "l’occitane"
}
}
}]
}
}

才不是。奇怪的是,如果我将单引号从文档中的“”更改为“:
"query": {
"bool": {
"should": [
{
"term": {
"myField.keyword_lowercase": {
"value": "l'occitane"
}
}
}]
}
}

现在,术语搜索有效。据我所知,asciifolding过滤器应该可以防止这种情况,所以我发现其他带有特殊字符的单词都存在此问题。

这里发生了什么?

最佳答案

很难看到,但是正如您所说的,它们是两种撇号。我想说的是single quote,法语的是apostrophe

将它们分别编入索引

POST mag/_doc
{"myField": "l'occitane"}

POST mag/_doc
{"myField":"l’occitane"}

然后通过分析关键字进行汇总:
GET mag/_search
{
"aggs": {
"by_terms": {
"terms": {
"field": "myField.keyword_lowercase"
}
}
}
}

屈服
"buckets" : [
{
"key" : "l'occitane",
"doc_count" : 2
}
]

这意味着,asciifolding拟合器将 apostrophe转换为 single-quote,并且由于术语查询对倒排索引中的确切值进行运算,因此您将无法使用 apostrophe进行查询。你需要去
...
{
"term": {
"myField.keyword_lowercase": {
"value": "l'occitane"
}
}
}
...

如果您确实想使用小写词查询,则需要删除asiifolding或在 myField中添加另一个映射字段,而无需上述asciifolding。这样,查询 myField.keyword_lowercase_no_ascii 与撇号一起使用。

关于elasticsearch - 在带有特殊字符的自定义关键字字段上使用字词查询时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61055145/

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