我正在使用安装在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
由于