ElasticSearch:当查询有一个被其他字符包围的通配符时,我正在努力使用小写

时间:2017-04-10 20:01:22

标签: elasticsearch

我正在使用安装在Windows服务器上的ElasticSearch 5.1.1。我正在使用Kibana v5.1.2进行测试。

我的字段“p.code_lower”的定义如下:

{
  "unittest_catalogdata": {
    "mappings": {
      "product": {
        "properties": {
          "p": {
            "properties": {
              "code_lower": {
                "type": "text",
                "fields": {
                  "sort_field": {
                    "type": "keyword"
                  }
                },
                "analyzer": "lower_keyword"
              }
            }
          }
        }
      }
    }
  }
}

我的分析器定义如下:

"analysis": {
    "analyzer": {
        "lower_keyword": {
            "filter": "lowercase",
            "tokenizer": "keyword"
        }
    }
}

以下值在p.code_lower中索引:

Cab.B30
Cab.B40
Cab.B50
Cab.B100
Cab.B120

*请注意,分析器是“关键字”+“小写”,因为我们需要能够在"p.code_lower:cab.b30"返回结果的情况下进行查询。由于我们的代码中有一个点,这是我们发现使ElasticSearch适用于该字段的唯一方法。

此查询返回0结果:

GET /unittest_catalogdata/_search
{
          "query": {
          "query_string": {
          "query": "p.code_lower:Cab.B?0",
          "lenient": true,
          "analyze_wildcard": true
        }
    }
}

但是这个查询(注意小写)返回3个代码(Cab.B30,Cab.B40,Cab.B50)

"query": "p.code_lower:cab.b?0",

此查询(大写,但没有字段名称)返回3个代码(Cab.B30,Cab.B40,Cab.B50):

"query": "Cab.B?0",

此查询按预期返回所有5个代码:

"query": "B*",

但这不是:

"query": "p.code_lower:Cab.B*",

然而这有效(再次降低):

"query": "p.code_lower:cab.b*",

如果搜索到的字符是小写还是大写,那么p.code_lower:Cab.B?0可以使用不区分大小写的查询可以做什么?所有这一切都保留了使用包含点的查询进行搜索的能力,即:p.code_lower:Cab.B30

由于

0 个答案:

没有答案