1

「ソース」フィールドを含むドキュメントのエラスティック インデックスがあります。

{"Source": "/Bob/Test/SomeDir/1.doc"},
{"Source": "/Steve/2.doc"},
{"Source": "/Steve/3.doc"},
{"Source": "/Steve/SomePath/4.doc"}
{"Source": "/Steve/SomeOther/5.doc"}
{"Source": "/Steve/SomeOther/6.doc"}

ソースが であると仮定するとnot_analyzed、次のことができます。

{"query": {"wildcard": "/Steve/*"}}

すべてのスティーブのドキュメントを取得します。それらがどこにあったかをカウントできるようにしたいと思います。

望ましい出力:

"/Steve/SomePath": 1,
"/Steve/SomeOther": 2,
"/Steve": 2 /*Nice to have, omitting this one would be fine*/

そのため、正規表現ファセットを使用して、ファセットしたいソースのビットを選択しようとしています。これが最も効率的な方法ではないことは承知しており、パイプラインでカスタム トークナイザーを使用する別のアイデアが得られていますが、今のところ単純な作業バージョンを取得できれば、後で改善できます。

{
  "query": {
    "wildcard": "/Steve/*"
  },
  "facets": {
    "tag": {
      "terms": {
        "field": "OriginalURI",
        "regex": "^\\/Steve\\/.*?\\/.*$",
        "regex_flags": "DOTALL|UNICODE_CASE"
      }
    }
  }
}

これがその後のすべてに影響を与えることを望ん/Steve/でいました(使用する一致グループを指定できると仮定して)。実際、それはフィルターとしてのみ適用されるようです-完全なソースがファセットに含まれているかどうかにかかわらず-そのため、カウントが1.

私は正しい道を進んでいますか?そうでない場合、これを行う正しい/簡単な方法は何ですか?

4

1 に答える 1