Elasticsearch父子呼喊返回父亲而不是孩子

时间:2017-01-19 03:53:00

标签: elasticsearch

我想我需要ElasticSearch的帮助。

我有一个parent child映射,我想在子文档中的父中搜索包含该单词的文档。想想一个SO问题和答案。有1:n个问题可供回答。我想问SeachWord在问题(父母)中的问题,我也想知道SearchWord是否在任何孩子的答案中,即使SearchWord不在问题

这是我的查询,结果是子文档,但我希望得到父文档。

{
    "query": {
        "bool": {
            "should": [{
                "query_string": {
                    "query": "SearchWord"
                }
            },
            {
                "has_child": {
                    "type": "answers",
                    "query": {
                        "match": {
                            "_all": "SearchWord"
                        }
                    }
                }
            }]
        }
    },
    "size": 1
}

感谢您的帮助!

更新

查询完全正确我唯一的错误就是对索引运行查询。

Worng: cUrl / index / _search

正确: cUrl / index / parenttype / _search

我希望这可以帮助任何有父母子女搜索问题的人; - )

问候
菲利普

2 个答案:

答案 0 :(得分:0)

您应该查询子项和filter on parent

cUrl / indexName / childType

{
  "query": {
    "bool": {
      "should": [
        {
          "has_parent": {
            "type": "questions",
            "query": {
              "query_string": {
                "query": "SearchWord"
              }
            }
          }
        },
        {
          "match": {
            "_all": "SearchWord"
          }
        }
      ]
    }
  },
  "size": 1
}

答案 1 :(得分:-1)

你的回答并不完全是我想要的,但我给了我正确的方向 我必须查询父类型而不是整个索引。所以这是我的解决方案,它的工作方式与预期一致。

{
  "query": {
    "bool": {
      "should": [
        {
          "has_child": {
            "type": "answers",
            "query": {
              "query_string": {
                "query": "SearchWord"
              }
            }
          }
        },
        { 
            "query_string" : {
                "query": "SearchWord" 
            } 
        }
      ]
    }
  },
  "size": 1
}

非常感谢!