2016-07-15 57 views
1

我有类似于文件路径的数据,我想在elasticsearch中编制索引。 (基本上是由分隔符分隔的标记列表)如何在弹性搜索中索引分层数据?

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

一旦I指数,我应该能够查询得到直接孩子对于一个给定的令牌,如下图所示。

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] 

回答

1

您是否考虑过亲子关系?

Parent-Child Docs

收录这样你可以用下面的

{ 
    "query": { 
    "has_parent": { 
    } 
} 

{ 
    "query": { 
    "has_child": { 
    } 
} 
+0

我该如何索引这个字符串,以便我可以使用这种查询? – Chandra

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"] }

  • 根据你的榜样 一种方式做到这一点210
  • 查询 'A' 儿童:在根

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

  • 查询令牌。在响应中寻找钥匙无 '_':

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

希望我已成功地帮助! :)