【问题标题】:Elasticsearch query_string nested queryElasticsearch query_string 嵌套查询
【发布时间】:2016-01-04 19:03:47
【问题描述】:

我正在尝试使用 query_string 编写一个查询来检索嵌套对象查询的数据。

我想做的一个查询示例是这个:

{
  "query": {
    "query_string": {
      "query": "a.id:2"
    }
  }
}

其中“a”是嵌套对象,“id”是“a”的字段。

我知道我可以使用嵌套查询成功执行此任务,编写如下查询:

{
  "nested": {
    "path": "a"
    "query_string": {
      "query": "a.id:2"
    }
  }
}

但是,我想避免它。我不想自己弄清楚用户正在搜索嵌套字段并修改查询。 我尝试使用“fields”参数,但它似乎不适用于嵌套对象。

是否可以直接使用“query_string”查询来编写此查询? 可以获得什么语义? (例如,如果我写“a.id:2 AND a.b:10”,我是在匹配同一对象或不同对象中的两个字段?)

【问题讨论】:

  • 我正试图找到同样问题的答案。只是想知道您是否能够找到任何解决方案。任何帮助都会很棒!谢谢
  • 很遗憾我没有找到解决办法。

标签: elasticsearch


【解决方案1】:

我做了更多的研究,发现这可以通过在映射中将 include_in_parent 设置为 true 来实现。

现在你应该可以进行类似的查询了

{
  "query": {
    "query_string": {
      "query": "fields.fieldvalue:sometext"
    }
  }
}

例如:-

"mappings": {
         "documentmetadatavalue": {
            "properties": {
              "id": {
                  "type": "string"
               },
               "fields": {
                 "type": "nested",
                 "include_in_parent": true, 
                 "properties": {
                   "fieldId": {"type": "string"},
                   "fieldvalue": {"type": "string"}
                 }
               }
           }
        }
     }

如果有帮助,请告诉我。

【讨论】:

  • 您提出的方案是一个不错的选择。但是请注意,通过设置“include_in_parent”,您会将嵌套资源展平为父对象中的对象。您实际上是将文档重新索引为展平对象。您正在失去嵌套对象的一些不错的功能。例如,如果您搜索的父对象至少有一个具有两个具有特定值的属性的子对象,则查询不会检查这两个属性在唯一的子对象中是否具有这些值。
  • 查看最近发布的 inner_hits 文档。您应该能够使其与此新功能一起使用。 (elastic.co/guide/en/elasticsearch/reference/1.x/…
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2018-03-08
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多