elasticsearch,lucene,kibana,aws-elasticsearch,Amazon Web Services,elasticsearch,Lucene,Kibana,Aws Elasticsearch" /> elasticsearch,lucene,kibana,aws-elasticsearch,Amazon Web Services,elasticsearch,Lucene,Kibana,Aws Elasticsearch" />

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

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,

我已使用连接到AWS ES域的Kibana创建了以下索引:

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
搜索返回正确的结果,非常感谢!