带有通配符的Elasticsearch不区分大小写的query_string查询

时间:2014-03-20 03:26:13

标签: elasticsearch

在我的ES地图中,我有一个' uri'当前设置为not_analysed的字段,我不允许更改映射。我想用这样的query_string查询搜索uri部分(这个ES查询是自动生成的,这就是为什么它有点复杂但是让& #39; s只关注query_string部分)

{
  "sort": [{"updated": {"order": "desc"}}], 
   "query": {
     "bool": {
       "must":[{
         "query_string": {
           "query":"*w3\\.org\\/2014\\/01\\/a*", 
           "lowercase_expanded_terms": true, 
           "default_field": "uri"
         }
       }], 
       "minimum_number_should_match": 1
     }
   }, "size": 50}

现在它通常正常工作,但是我存储了以下网址(虚构网址):http://w3.org/2014/01/Abc.html并且由于A-a差异,此查询不会将其恢复。将扩展术语设置为false也不能解决此问题。我该怎么做才能使这个查询不区分大小写?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

从文档中,您似乎需要一个新的分析器,首先转换为小写,然后才能运行搜索。你试过吗? http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/sorting-collations.html

当我读到它时,你的模式lowercase_expanded_terms只适用于扩展,而不适用于常规单词 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html lowercase_expanded_terms Whether terms of wildcard, prefix, fuzzy, and range queries are to be automatically lower-cased or not (since they are not analyzed). Default it true

答案 1 :(得分:-1)

尝试使用match query代替query string

{
"sort": [
    {
        "updated": {
            "order": "desc"
        }
    }
],
"query": {
    "bool": {
        "must": [
            {
                "match": {
                    "uri": "*w3\\.org\\/2014\\/01\\/a*"
                }
            }
        ]
    }
},
"size": 50
}

Query string查询不会被分析,但会分析匹配查询。