簡體   English   中英

如何在ver_6.2.4的Elasticsearch中搜索具有相同父ID的子文檔?

[英]how to search child documents with the same parent id in Elasticsearch on ver_6.2.4?

我閱讀了有關如何在Elasticsearch中搜索具有相同父ID的子文檔的答案 ,但是他們都無法在6.2.4上解決它,有人可以告訴我如何在6.2.4上完成相同的工作嗎?

從Elasticsearch 6.x開始,將父/子作為單獨類型存儲已替換為join數據類型 這從根本上不會改變索引和查詢這些文檔的方式,但是會稍微改變語法。

注意:這組更改是為完全刪除type而准備的,這在7.x中發生

初始化映射(使用模板)

除了指定不同的類型,我們將創建一個join指定字段branch_join的所有文件。 relations配置指定了父級->子級關系,鍵( branch )為父級,值( employee )為子級。

注意:為了示例,我使用名為organization的索引

PUT _template/org_template
{
  "index_patterns": ["organization"],
  "settings": {
    "number_of_shards": 2
  },
  "mappings": {
    "_doc": {
      "properties": {
        "branch_join": {
          "type": "join",
          "relations": {
            "branch": "employee"
          }
        }
      }
    }
  }
}

為您的文件編制索引

索引父文檔是相似的,但是我們需要通過在branch_join字段中指定branch來指定每個文檔位於關系的哪一側。

POST /organization/_doc/_bulk
{"index": {"_id": "london"}}
{"name": "London Westminster", "city": "London", "country": "UK", "branch_join": {"name":"branch"}}
{"index": {"_id": "liverpool"}}
{"name": "Liverpool Central", "city": "Liverpool", "country": "UK", "branch_join": {"name":"branch"}}
{"index": {"_id": "paris"}}
{"name": "Champs Élysées", "city": "Paris", "country": "France", "branch_join": {"name":"branch"}}

要為子級建立索引,我們需要做兩件事:1.我們需要再次指定branch_join字段,不僅要指定連接的哪一側是( employee ),還需要指定父級的_id要加入的文件。 2.為了確保子代與父代在同一分片上建立索引,我們將routing參數設置為等於父代文檔的_id

POST /organization/_doc/_bulk
{"index": { "_id": 1, "routing": "london"}}
{"name": "Alice Smith", "dob": "1970-10-24", "hobby": "hiking", "branch_join": {"name":"employee", "parent": "london"}}
{"index": { "_id": 2, "routing": "london"}}
{"name": "Mark Thomas", "dob": "1982-05-16", "hobby": "diving", "branch_join": {"name":"employee", "parent": "london"}}
{"index": { "_id": 3, "routing": "liverpool"}}
{"name": "Barry Smith", "dob": "1979-04-01", "hobby": "hiking", "branch_join": {"name":"employee", "parent": "liverpool"}}
{"index": { "_id": 4, "routing": "paris"}}
{"name": "Adrien Grand", "dob": "1987-05-11", "hobby": "horses", "branch_join": {"name":"employee", "parent": "paris"}}

詢問

該查詢幾乎是相同的,只是type已更名為parent_type以便更明確:

POST /organization/_search
{
  "query": {
    "has_parent": {
      "parent_type": "branch", 
      "query": {
        "ids": {
          "values" : ["london"]
        }
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM