如何解决必须匹配查询在 Elasticsearch 中未按预期工作
我使用连接到我的 AWS ES 域的 Kibana 在下面创建了我的索引:
group
然后我索引了 100 个文档,使用以下命令返回所有 100 个文档:
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"
}
}
}
}
下面是两个示例文档:
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","_id" : "cd0a3723-106b-4aea-b916-161e556329ab","_source" : {
"identifier" : "xweeqkra","class_name" : "/Sample_class_name_2","client_id" : "random_str_2"
}
}
进行搜索时:
CLASS_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。
如果我们GET sals_poc_test_20210217-7
,两个类名属性都应该在索引映射中。第一个是在创建索引时创建的,第二个是在向索引添加文档时创建的。
因此,查询应该在 CLASS_NAME 或 class_name.keyword 上,默认情况下弹性搜索会为动态属性创建 text 和 .keyword 字段
"CLASS_NAME" : {
"type" : "keyword"
},"class_name" : {
"type" : "text","fields" : {
"keyword" : {
"type" : "keyword","ignore_above" : 256
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。