elasticsearch - Elastic Search中doc.field_name与field_name之间的区别?

标签 elasticsearch querydsl

我有这样的消息来源:

{
      "doc" : {
        "questions" : [
          {
            "question" : "Which gold customers in Texas had bank accounts with more than $10 million last year ?",
            "state" : "COMPLETED",
            "tags" : [
              "computer"
            ]
          }
        ]
      }
    }

当我编写一个用于根据状态和标记进行搜索的查询时,该查询看起来像这样,
 {
  "size": "2000",
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "doc.questions.state": "COMPLETED"
          }
        },
        {
          "match": {
            "doc.questions.tags": "computer"
          }
        }
      ]
    }
  },
  "from": "0",
  "_source": {
    "includes": [
      "doc.questions.question",
      "doc.questions.state",
      "doc.questions.tags"
    ]
  }
}

为什么需要编写 doc.questions.tag 而不是questions.tags

如果我删除文档。 来自任何键,没有匹配项

enter image description here

有什么区别?

最佳答案

基本上,Elasticsearch在JSON结构内有JSON的两个变体,即 nested object 类型。

您的情况是object类型。您可以使用以下方式验证mapping或RDBMS术语中的索引模式:

GET <your_index_name>/_mapping

为了基于内部json结构的值进行搜索,您需要包括字段的整个路径,否则elasticsearch会将questions视为其在doc之外的字段。

因此,如果您的JSON结构如下所示,则可以通过删除doc来工作。
{
   "questions":[
      {
         "question":"Sample Question",
         "state":"Completed",
         "tags":[
            "computer"
         ]
      }
   ]
}

希望您现在能理解为什么为什么不能简单地得到任何结果,因为questions的JSON结构从doc开始。

我分享的链接将帮助您澄清。希望有帮助!

关于elasticsearch - Elastic Search中doc.field_name与field_name之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710757/

相关文章:

elasticsearch - elasticsearch计算唯一值的平均值

php - Elasticsearch 更新legal_argument_exception

sql - QueryDsl:带有投影 bean 和 oneToMany 或 manyToMany 关联的异常 "argument type mismatch"

java - 使用 QueryDSL 和 Mongo 转换映射值类型

java - 通过 QueryDSL 检索表名和/或列名?

java - 更改 QueryDSL 生成的文件目录

java - java api中的 Elasticsearch 查询

java - Elasticsearch:从点击中学习(搜索结果排名)

elasticsearch - 情绪分析-弹性叠加

java - 在 Play 2 框架上配置 QueryDSL