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

时间:2018-06-12 18:18:54

标签: java elasticsearch kibana elastic-stack

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

请查看以下查询

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

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

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

2 个答案:

答案 0 :(得分:1)

尝试以下:

映射:

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*

让我知道它是否适合你。

答案 1 :(得分:0)

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

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标记上的完全匹配以及最后一个标记上的前缀匹配,从不同标记构建布尔查询