代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

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

  •  1
  • Karthikeyan  · 技术社区  · 7 年前

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

    请查找以下查询

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

    它可以工作并为上面的查询提供预期的结果,但对于小写的值不起作用。

    get my_index12/_search
    { 
      "query": { 
      "wildcard": { 
      "code.keyword": { 
              "value": "*Arg*" 
            } 
        } 
      } 
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Richa    7 年前

    尝试以下操作:

    映射:

    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*

    如果对你有用,请告诉我。

        2
  •  0
  •   SouXin    7 年前

    必须规范化关键字字段:

    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个令牌上的精确匹配和最后一个令牌上的前缀匹配,使用不同的令牌构建布尔查询。