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
のみ)を試しましたが、動作しないはずです。そしてもちろん、それでも結果は出ませんでした。
この正規表現検索を手伝ってください。そのクエリに一致する結果が得られないのはなぜですか?
なぜその正規表現クエリが機能しないのかはわかりませんが、KibanaがElasticsearchのクエリ文字列クエリを使用していると思います here たとえば、次のようにしてフレーズクエリを実行できます(リンクに記載されています)検索を二重引用符で囲むと、単語「foo」とそれに続く「bar」が検索されます。これは、高速検索を実行するために各Wordをトークン化した分析済みフィールド(my_field)でこれを行うため、パフォーマンスも向上します。したがって、Kibanaでの検索は次のようになります。
my_field: "FOO BAR"
更新:
これはKibanaの厄介な癖のようです(おそらく後方互換性のため)。とにかく、分析されていないフィールドに対して検索を行っているため、これは一致しません。デフォルトではKibanaが検索を小文字にしているため、分析されていない大文字の "FOO"とは一致しません。これは、前述のKibanaの詳細設定 here で、特に構成オプション "lowercase_expanded_terms"をfalseに設定することで構成できます。
Kibanaの標準クエリ言語はLucene クエリ構文 に基づいています。
そしてデフォルトのアナライザーはテキストを別の単語にトークン化します:[MY、FOO、Word、BAR、EXAMPLE]
正規表現一致を使用する代わりに、Kibanaで次の検索文字列を試すことができます。
my_field: FOO AND my_field: BAR
また、「my_field」データがトークン化できない「MYFOOWORDBAREXAMPLE」のように見える場合は、クエリ文字列を使用する必要があります。
my_field: *FOO*BAR*