弹性搜索通配符查询不适用于不区分大小写(对于小写)



我正在尝试使用通配符查询从 elasticsearch 获取记录。

请找到以下查询

get my_index12/_search
{ 
"query": { 
"wildcard": { 
"code.keyword": { 
"value": "*ARG*" 
} 
} 
} 
}

它正在工作并为上述查询提供预期结果,但它不适用于小写值。

get my_index12/_search
{ 
"query": { 
"wildcard": { 
"code.keyword": { 
"value": "*Arg*" 
} 
} 
} 
}

尝试以下操作:

映射:

PUT my_index12
{
"settings": {
"analysis": {
"analyzer": {
"custom_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"code": {
"type": "text",
"analyzer": "custom_analyzer"
}
}
}
}
}

然后运行Query String查询

GET my_index12/_search
{
"query": {
"query_string": {
"default_field": "code",
"query": "AB\-7000*"
}
}
}

它也适用于ab-7000*

让我知道它是否适合您。

您必须规范化关键字字段:

ElasticSearch normalizer

类似的东西(来自文档(:

PUT index
{
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"foo": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
}
}
}

更新一些附加信息:

仅应用在字符级别操作的分析链部分。因此,例如,如果分析器同时执行小写和词干提取,则只会应用小写:对缺少某些字母的单词执行词干分析是错误的。

通过将 analyze_wildcard 设置为 true,将分析以 * 结尾的查询,并通过确保前 N-1 个令牌上的前缀匹配以及最后一个令牌上的前缀匹配,从不同的令牌中构建布尔查询。

最新更新