如何在有父查询中搜索

时间:2019-01-14 16:42:33

标签: elasticsearch elasticsearch-5

我一直在尝试搜索具有父查询的内容,但由于找不到合适的操作步骤而无法执行。例如,我有角色表,有用户表,我使用1作为管理员角色,并且在用户表中,我有一个名为user_role的属性,并且我已经记录了user_role = 1如何使用具有父查询的映射然后进行相应的搜索。

谢谢, 阿里。

https://www.elastic.co/guide/en/elasticsearch/reference/5.5/mapping-parent-field.html

无法完全理解。

1 个答案:

答案 0 :(得分:0)

让我们从https://www.elastic.co/guide/en/elasticsearch/reference/5.5/mapping-parent-field.html中获取映射和样本数据:

PUT my_index
{
  "mappings": {
    "my_parent": {},
    "my_child": {
      "_parent": {
        "type": "my_parent" 
      }
    }
  }
}

PUT my_index/my_parent/1 
{
  "text": "This is a parent document"
}

PUT my_index/my_child/2?parent=1 
{
  "text": "This is a child document"
}

PUT my_index/my_child/3?parent=1&refresh=true 
{
  "text": "This is another child document"
}

由于两个子文档都匹配,因此在同一页面上的查询将获取单个父文档:

GET my_index/my_parent/_search
{
  "query": {
    "has_child": { 
      "type": "my_child",
      "query": {
        "match": {
          "text": "child document"
        }
      }
    }
  }
}

稍作修改,您就可以在has_parent上进行搜索:

GET my_index/my_child/_search
{
  "query": {
    "has_parent": { 
      "parent_type": "my_parent",
      "query": {
        "match": {
          "text": "parent"
        }
      }
    }
  }
}

PS:在6.x中,这已经发生了很大变化。如果可能的话,我现在移至6,以避免以后出现升级麻烦。