私は3レベル(またはそれ以上)の子 - 親を索引付けする必要があります。 たとえば、レベルは著者、書籍、およびその書籍の文字です。Elasticsearch deeper level親子関係(孫)
ただし、2つ以上のレベルのインデックスを作成すると、has_childクエリとhas_parentクエリとフィルタに問題があります。 シャードが5つある場合、最下位レベル(文字)の「has_parent」クエリまたは2番目のレベル(書籍)のhas_childクエリを実行すると、結果の約5分の1が得られます。
私の推測では、書籍は親のIDによって断片に索引付けされるため、親(著者)と一緒に存在しますが、書籍idのハッシュに基づいて文字が索引付けされます。本が索引付けされた実際の断片と必ずしも一致しません。
これは、同じ著者の本のすべての性格が、必ずしも同じシャードに存在するとは限らないことを意味します。
何か間違っていますか?どのように私はこれを解決することができますか?例えば、著者が「女性のキャラクターと一緒に本を書いたもの」などの複雑なクエリを本当に必要としています。
I怒っで、問題を示す要旨:"author" : {
"properties" : {
"name" : {
"type" : "string"
}
}
},
"book" : {
"_parent" : {
"type" : "author"
},
"properties" : {
"title" : {
"type" : "string"
}
}
},
"character" : {
"_parent" : {
"type" : "book"
},
"properties" : {
"name" : {
"type" : "string"
}
}
}
と5つの破片指数、私は "とのクエリを作ることができない:私はマッピングを持っている場合という、 https://gist.github.com/eranid/5299628
ボトムラインでありますhas_child」と "HAS_PARENT"
クエリ:
curl -XPOST 'http://localhost:9200/index1/character/_search?pretty=true' -d '{
"query": {
"bool": {
"must": [
{
"has_parent": {
"parent_type": "book",
"query": {
"match_all": {}
}
}
}
]
}
}
}'
は、文字の約5分の1を返します。
cool。私はそれをどのように指定するのですか? – eran
URLのルーティングパラメータを使用しています。ここのルーティングセクションを参照してください - http://www.elasticsearch.org/guide/reference/api/index_/ – imotov
ありがとうございます。ポストデータでこれを何とか指定することはできますか?具体的にはbulk_indexのために、各文書のルーティングを指定したいのですか? – eran