我正在尝试使用通配符查询从 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 个令牌上的前缀匹配以及最后一个令牌上的前缀匹配,从不同的令牌中构建布尔查询。