0

インデックスにいくつかのドキュメントがあるとしましょう。フィールドの 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 から取得する必要があります。

4

1 に答える 1

0

URL付きのドキュメントが与えられた場合/a/b/c

複数値を持つフィールドurl と入力 (前処理を使用) 値: /a/a/b/a/b/c

編集

特定の深さのパスにカウントを表示することを制限したい場合は、上記のように複数の多値フィールドを設計できます。各フィールドは特定の深さを表します。

ES クライアントには、ファセットを照会する深さ (したがって、フィールド) を決定するロジックが含まれている必要があります。

それでもハックのように感じます。実際、データを制御しないと、このために多くのフィールドが作成される可能性があります。

于 2013-05-14T14:20:24.377 に答える