2017-02-16 1 views
1

私はデータベースツールを研究しています。私はElasticが自分の要求にどのように対応できるのかよく分かりません。弾性検索の深いツリーモデル

私はツリーデータ構造、すなわちファミリーツリーを持っています。

根は最初の男アダムです。その後、彼の子供たち、子供たちなどがいます。

Elementsは、この(単にアイデアを得るために結婚の関係について、このデータを気にしない)ようになっています

  1. 「フルテキストを:私はexecしたいのですが

    { 
        id: 1 
        name: “Adam” 
        parentId: 0 
    }, { 
        id: 2 
        name: “Cain” 
        parentId: 1 
    }, { 
        id: 3 
        name: “Abel” 
        parentId: 1 
    }, { 
        id: 4 
        name: “johnny(Cain junior)” 
        parentId: 2 
    }, … { 
        id: 12324568 
        name: “Cain b” 
        parentId: 1434 
    } 
    

    クエリ要素名の検索では、文書とそのパスを応答に含める必要があります。たとえば、「カイン」を検索すると、再生する必要があります。

    a。 Adam/Cain

    b。 IDによる../David/Danny/Cain B

  2. CRUD者(Idsはユニークである)

  3. はidで家系図を取得し、rootとして 'ID' から、階層ツリー(ネストされたJSON)を応答します

  4. ツリーが10,000要素最後に

、私の質問まで、およそ〜20〜30レベルの深さ:

  1. 弾性検索でこの機能を利用できますか?

  2. 親/子スキームを使用する必要がありますか?

  3. インデックスマッピングをどのように見えるか。

    3)あなたのインデックスマッピングは次のようなものになります:あなたの質問に答えるために

答えて

1

{ 
    "mappings": { 
    "my_index": { 
     "properties": { 
     "id": { 
      "type": "integer", 
      "fielddata": true <-- you need this if you're using this field for aggregations 
     }, 
     "parentId": { 
      "type": "integer" 
     }, 
     "name": { 
      "type": "text" <-- can be text/keyword depending on your requirement 
     } 
     } 
    } 
    } 
} 

2)私はparent-childマッピングを使用することができ示唆し、あなたができるように、 1対多の関係を持っています。 Elasticsearchは、親が子供にどのように対応しているかのマップを保持しており、このマッピングのために照会時間の結合が高速です。このSOを読んで、が入れ子になっている上の親子マッピングのベンチマークを知ることができます。

1)あなたはいつもテキストとしてあなたのフィールドに限り、あなたはあなたのマッピングタイプを持っているようにfull text検索を行うことができます。 Thisは、keyword以上のタイプtextを使用した場合の相違点を特定するのに役立ちます。 1つのドキュメントをインデックスに追加することもできますし、複数のドキュメントを含むbulkを追加することもできます。これは、他の操作とも同様になる。CRUD操作も同様である。親のIDでドキュメントをリクエストしているときに、階層ツリーがどのように応答するかはまだ分かりません。

希望すると便利です。私が正しく理解している場合、 が、それは同じタイプのnレベルのツリーを作成することができない私はここに親/子を使用する方法 :@Darth_Vaderは、それはあなたの答えを読んだ後 を支援しています

+0

おかげで私は質問をフォローアップしてい"my_index"? (ダークサイドの)力があなたと一緒にいるかもしれない: – Ilan