Amazon web services 必须匹配查询在Elasticsearch中未按预期工作
我已使用连接到AWS ES域的Kibana创建了以下索引:Amazon web services 必须匹配查询在Elasticsearch中未按预期工作,amazon-web-services,elasticsearch,lucene,kibana,aws-elasticsearch,Amazon Web Services,elasticsearch,Lucene,Kibana,Aws Elasticsearch,我已使用连接到AWS ES域的Kibana创建了以下索引: PUT sals_poc_test_20210217-7 { "settings" : { "index" : { "number_of_shards" : 10, "number_of_replicas" : 1, "max_result_window": 50000,
PUT sals_poc_test_20210217-7
{
"settings" : {
"index" : {
"number_of_shards" : 10,
"number_of_replicas" : 1,
"max_result_window": 50000,
"max_rescore_window": 50000
}
},
"mappings": {
"properties": {
"identifier": {
"type": "keyword"
},
"CLASS_NAME": {
"type": "keyword"
},
"CLIENT_ID": {
"type": "keyword"
}
}
}
}
然后我索引了100个文档,使用下面的命令返回所有100个文档:
POST /sals_poc_test_20210217-7/_search
{
"query": {
"match": {
"_index": "sals_poc_test_20210217-7"
}
}
}
以下是两份样本文件:
{
"_index" : "sals_poc_test_20210217-7",
"_type" : "_doc",
"_id" : "cd0a3723-106b-4aea-b916-161e5563290f",
"_score" : 1.0,
"_source" : {
"identifier" : "xweeqkrz",
"class_name" : "/Sample_class_name_1",
"client_id" : "random_str"
}
},
{
"_index" : "sals_poc_test_20210217-7",
"_type" : "_doc",
"_id" : "cd0a3723-106b-4aea-b916-161e556329ab",
"_score" : 1.0,
"_source" : {
"identifier" : "xweeqkra",
"class_name" : "/Sample_class_name_2",
"client_id" : "random_str_2"
}
}
但是当我想通过下面的命令通过CLASS\u NAME
搜索时:
POST /sals_poc_test_20210217-7/_search
{
"size": 200,
"query": {
"bool": {
"must": [
{ "match": { "CLASS_NAME": "/Sample_class_name_1"}}
]
}
}
}
不仅返回与此类名匹配的文档
,还返回其他文档
有人能解释一下这个案子吗
我怀疑我写搜索查询的方式有问题。但我不知道为什么
谢谢 弹性搜索,区分大小写。class_name不等于class_name示例文档似乎具有
class_name
,但索引中的映射似乎具有“class_name”
如果我们获取sals\u poc\u test\u 20210217-7
,则两个类名属性都应该在索引映射中。一个是在创建索引时创建的,另一个是在将文档添加到索引时创建的
所以,查询应该是CLASS_NAME或CLASS_NAME.keyword,默认情况下,弹性搜索为动态属性创建文本和.keyword字段
"CLASS_NAME" : {
"type" : "keyword"
},
"class_name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
很好,我可以通过使用
class\u name.keyword
,而不是class\u name
,来搜索并获得正确的结果,关于如何查询以便我可以使用class\u name
进行搜索,有什么建议吗?谢谢您同时拥有CLASS_NAME和CLASS_NAME属性有什么原因吗?如果您的数据具有class_name,则最好在映射中使用小写class_name创建索引。如果两者都有,那么在mapping中创建两个属性作为关键字,我们可以修改查询以使用或conditionPerfect搜索这两个属性,我现在只使用小写的class\u name
,通过class\u name
搜索返回正确的结果,非常感谢!