Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best structure for storing tree in Elasticsearch?

I am trying to store a tree in Elasticsearch. My tree can theoretically be infinitely long (although that is unlikely to happen) and can branch relatively often.

What is the best approach for storing this?

I looked into this question but its answer has limited performance when branching. Is there any way I can achieve proper nesting of documents, while still having the flexibility of branching, and the overall performance when reading a tree and its nodes?

like image 992
Mathias Lykkegaard Lorenzen Avatar asked Oct 03 '16 21:10

Mathias Lykkegaard Lorenzen


1 Answers

I very much recommend storing trees in ES in a similar fashion as Mongodb suggests using Materialized paths

Just store every node in the tree as a document inside an index, if you have different kinds of nodes you can just create a type field and filter by that.

Store the path of the document in the tree as a comma delimited string like this:

path: ',root,books,fiction'

you can later use text search to search in subtrees

See the docs here for more details: https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-materialized-paths/

like image 130
Jesus Gomez Avatar answered Sep 17 '22 21:09

Jesus Gomez