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

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

elasticsearch ElasticSearch:当查询有一个被其他字符包围的通配符时,我正在努力使用小写,elasticsearch,elasticsearch,我正在使用安装在Windows服务器上的ElasticSearch 5.1.1。我正在使用KibanaV5.1.2进行测试 我的字段“p.code_lower”的定义如下: { "unittest_catalogdata": { "mappings": { "product": { "properties": { "p": { "properties": { "code_lower":

我正在使用安装在Windows服务器上的ElasticSearch 5.1.1。我正在使用KibanaV5.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"
        }
    }
}
我的分析仪定义如下:

{
  "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_中索引的以下值较低:

Cab.B30
Cab.B40
Cab.B50
Cab.B100
Cab.B120
*请注意,分析器是“关键字”+“小写”的,因为我们需要能够执行一个查询,其中
“p.code\u 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)

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

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

"query": "B*",
但这并不是:

"query": "p.code_lower:Cab.B*",
但这是可行的(再次小写):

如果
p.code\u lower:Cab.B?0
将在搜索的字符是小写还是大写的情况下工作,那么可以执行不区分大小写的查询吗?所有这些都保留了使用包含点的查询进行搜索的能力,即:
p.code\u lower:Cab.B30


谢谢

您是否尝试使用默认分析器(
standard
)。它保留了圆点。而且应该像你期望的那样工作。谢谢你,你是对的!我无缘无故地把事情复杂化了。
"query": "p.code_lower:cab.b*",