如何在弹性搜索中索引分层数据?

时间:2016-07-15 17:29:29

标签: elasticsearch indexing hierarchical-data

我有类似于我想在elasticsearch中索引的文件路径的数据。 (基本上由分隔符分隔的令牌列表)

Ex data:
a/b/c/d/e
a/b/c/
a/m/n
x/y/z

一旦我编入索引,我应该能够查询以获得给定令牌的直接子节点,如下所示。

For prefix of a, immediate children are [b, m]
For prefix of x, immediate children are [y]
Also tokens at root would be [a,x]

2 个答案:

答案 0 :(得分:1)

您是否考虑过亲子关系?

Parent-Child Docs

索引,您可以使用以下

进行查询
{
  "query": {
    "has_parent": {
  }
}

{
  "query": {
    "has_child": {
  }
}

答案 1 :(得分:1)

我认为在Elasticsearch中没有开箱即用的方法,因此您需要自己对层次结构进行建模。 根据您的示例,一种方法:

索引数据

POST index/type/id1
{
    "a":["b","c","d","e"]
}

POST index/type/id2
{
    "a":["b","c"]
}

POST index/type/id3
{
    "a":["m","n"]
}

POST index/type/id4
{
    "x":["y","z"]
}

查询'a'儿童

POST index/type/_search
{
    "size":0,
    "aggs": {
    "paths": {
        "terms": {
            "field": "a",
            "size": 0
        }
    }
}

在root用户查询令牌。在响应中查找没有“_”

的键
POST index/type/_search
{
     "size":0,
     "aggs": {
         "Field names": {
              "terms": {
                  "field": "_field_names", 
                  "size": 0
              }
         }
     }
 }

希望我能帮到你! :)