web-dev-qa-db-ja.com

木花正規表現検索

ELKの初心者です。フィールド内の単語の出現順に基づいてドキュメントを検索したい。例えば、

Doc1では、my_field: "MY FOO Word BAR Examples"
doc2、my_field: "MY BAR Word FOO Examples"

Kibanaで、「FOO」の後に「BAR」が続き、その逆ではないドキュメントを照会したいと思います。したがって、この場合はdoc2ではなくdoc1を返すようにします。 Kibana検索で以下のクエリを使ってみました。しかし、それは機能していません。このクエリは、検索結果も生成しません。

my_field.raw:/.*FOO.*BAR.*/

私はまた、分析されたフィールド(my_fieldのみ)を試しましたが、動作しないはずです。そしてもちろん、それでも結果は出ませんでした。

この正規表現検索を手伝ってください。そのクエリに一致する結果が得られないのはなぜですか?

11

なぜその正規表現クエリが機能しないのかはわかりませんが、KibanaがElasticsearchのクエリ文字列クエリを使用していると思います here たとえば、次のようにしてフレーズクエリを実行できます(リンクに記載されています)検索を二重引用符で囲むと、単語「foo」とそれに続く「bar」が検索されます。これは、高速検索を実行するために各Wordをトークン化した分析済みフィールド(my_field)でこれを行うため、パフォーマンスも向上します。したがって、Kibanaでの検索は次のようになります。

my_field: "FOO BAR"

更新:

これはKibanaの厄介な癖のようです(おそらく後方互換性のため)。とにかく、分析されていないフィールドに対して検索を行っているため、これは一致しません。デフォルトではKibanaが検索を小文字にしているため、分析されていない大文字の "FOO"とは一致しません。これは、前述のKibanaの詳細設定 here で、特に構成オプション "lowercase_expanded_terms"をfalseに設定することで構成できます。

1
RyanR

Kibanaの標準クエリ言語はLucene クエリ構文 に基づいています。

そしてデフォルトのアナライザーはテキストを別の単語にトークン化します:[MY、FOO、Word、BAR、EXAMPLE]

正規表現一致を使用する代わりに、Kibanaで次の検索文字列を試すことができます。

my_field: FOO AND my_field: BAR

また、「my_field」データがトークン化できない「MYFOOWORDBAREXAMPLE」のように見える場合は、クエリ文字列を使用する必要があります。

my_field: *FOO*BAR*
0
carton.swing