【问题标题】:Case insensitive searching in elasticsearch 6.1.2elasticsearch 6.1.2 中不区分大小写的搜索
【发布时间】:2018-08-05 22:27:38
【问题描述】:

我正在尝试搜索以下案例

我想搜索以特定单词结尾的名称。例如:

名称:组测试

名称:组测试

名称:组测试组织

这是我的通配符查询

"bool" : {
    "must" : [
            {
            "wildcard" : {
                "name.keyword"" : {
                    "wildcard" : "*test",
                    "boost" : 1.0
                }
            }
        }
    ]
}

它返回“组测试”以进行区分大小写的搜索

但我需要同时获取“组测试”和“组测试”以进行不区分大小写的搜索。

我的映射如下:

 "name":{
            "type":"text",
            "fielddata":true
            "fields":{
                "keyword":{
                            "type":"keyword"
                        }
                }
         }

谁能帮我找出在 elasticsearch java api 中的查询或任何其他方式来搜索它。

弹性搜索版本 6.1.2

非常感谢任何帮助。

【问题讨论】:

标签: java elasticsearch wildcard case-insensitive


【解决方案1】:

不幸的是,由于keyword 类型没有analyzer 属性,所以没有直接的方法可以通过ES 配置执行此操作,但我找到了一种解决方法。请看一下这个solution

PUT test
{  
  "settings": {
    "analysis": {
      "analyzer": {
        "folding": {
          "tokenizer": "standard",
          "filter":  [ "lowercase", "asciifolding" ]
        }
      },
      "normalizer": {
        "lowerasciinormalizer": {
          "type": "custom",
          "filter":  [ "lowercase", "asciifolding" ]
        }
      }
    }
  },
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "string_as_keyword": {
            "match_mapping_type": "string",
            "match":   "*_k",
            "mapping": {
              "type": "keyword",
              "normalizer": "lowerasciinormalizer"                              
            }
          }
        }
      ]
    }
  }
}

PUT test/1/123
{
  "str_k" : "string âgáÈÒU is cool"
}

GET test/_search
{
  "query": {
    "wildcard": {
      "str_k": "*agaeou*"
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2015-08-04
    • 2013-09-26
    相关资源
    最近更新 更多