インデックスにいくつかのドキュメントがあるとしましょう。フィールドの 1 つは URL です。何かのようなもの...
{"Url": "Server1/Some/Path/A.doc"},
{"Url": "Server1/Some/OtherPath/B.doc"},
{"Url": "Server1/Some/C.doc"},
{"Url": "Server2/A.doc"},
{"Url": "Server2/Some/Path/B.doc"}
検索結果のパスごとにカウントを抽出しようとしています。これはおそらくブランチごとのクエリになります。
例えば:
Initial query:
Server1: 3
Server2: 2
Server1 Query:
Some: 3
Server1/Some Query:
Path: 1
OtherPath: 1
今、私はこれにアプローチする 2 つの方法を大まかに見ることができますが、私はどちらも大ファンではありません。
オプション 1: スクリプト。mvel は数学演算に限定されているようです (少なくとも、ドキュメントで文字列分割を見つけることができません) ので、これは Java でなければなりません。それは可能ですが、多くのレコードがあるとオーバーヘッドが大きくなるように感じます。
オプション 2: パス部分をドキュメントと一緒に保存する...
{"Url": ..., "Parts": ["1|Server1","2|Some","3|Path"]},
{"Url": ..., "Parts": ["1|Server1","2|Some","3|OtherPath"]},
{"Url": ..., "Parts": ["1|Server1","2|Some"]},
{"Url": ..., "Parts": ["1|Server2"]},
{"Url": ..., "Parts": ["1|Server2","2|Some","3|Path"]}
このようにして、次のようなことができます。Urls starting with 'Server1/Some', facet on parts starting with 3|
. これはひどくハックな気がします。
これを行う良い方法は何ですか?必要なだけ前処理を行うことができますが、重要なのはクエリからの結果のカウントであるため、カウントは ES から取得する必要があります。