私はElasticsearchサービスを開発しています。サポートチケットポータルとフォーラムのようなソースが複数あります。現在、私はそれぞれのソースが子の型を持つので、それ自身のインデックスに各ソースを分けています。チケットポータルではもちろんチケット(ネストされた返信を含む)を検索するだけでなく、ポータルインデックスの下に複数のタイプがあるので、検索ユーザーなども含みます。これまでの単純なもの。Elasticsearchでインデックスを使用するか、タイプフィールドを使用する
しかし、両方のソースを検索したいと思っているので、インデックスをマージして型の前にプレフィックス(portalTicket、portalUser、forumThread、forumUserなど)を付けることを考え始めていますが、それらをすべて一緒に戻してください。私はここに、小さな開始するために、現時点ではチケットやスレッドで働いている私は、これまで使用しています2つの最も単純なマッピングは、次のとおりです。
{
ticket : {
properties : {
replies : {
type : 'nested'
}
}
}
}
{
thread : {
properties : {
posts : {
type : 'nested'
}
}
}
}
は、私は違うとネストされたオブジェクトを使用しています表示するにはそれを見せたかったです名前。私はもちろん同じ名前を持つことができますが、ネストされた型でもあるチケットとスレッドのマッピングに付随する他のメタデータもあります。インデックスを指定せずに検索すると、期待どおり、ネストされた型を持たないもので問題が発生します。スレッドマッピングにはreplies
というプロパティはありません。posts
です。ポータルインデックスのために働くこと、
{
filter : {
indices : {
index : 'portal',
no_match_query : 'none',
query : {
bool : {
should : [
{
match : {
title : 'help'
}
},
{
nested : {
path : 'replies',
query : {
match : {
'replies.text' : 'help'
}
}
}
}
]
}
}
}
}
}
[OK]をしかし、フォーラムのインデックスを含むように作業が、私はちょうどelasticsearchを戦うと使用していないように私は感じて作っている:私はそれはそうのようなフィルタでindex
を使用して回避することができますそれは適切です。
インデックスを別々のインデックスに保ち、両方のインデックス結果を返すフィルタを取得するか、単一のインデックスにマージしてソースを保持するフィールドを使用し、ネストされたプロパティを正規化するか、多面的な方法で複数のインデックスを扱う?
"one index vs many"のトレードオフについては、こちらをご覧ください:http://stackoverflow.com/questions/14465668/elastic-search-multiple-indexes-vs-one-index-and-types-for-different-data -sets タイプについては、RESTエンドポイントとクエリ構造を調整して、クエリのタイプ別に簡単にフィルタリングできます。 – ryanlutgen
@ryanlutgenありがとうございました、私の持ち帰りから、私は各ソースごとに数百万のドキュメントを持っているので、私は複数のインデックスに固執する必要があります。ネストされたオブジェクトを検索する正しい方向にいるのか、私が上のようにさまざまなインデックスを適切に検索するのかを言うことができますか? –
https://www.elastic.co/blog/index-vs-type –