必须匹配查询在 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
        }
      }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...