微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

必须匹配查询在 Elasticsearch 中未按预期工作

如何解决必须匹配查询在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?