web-dev-qa-db-ja.com

ワイルドカード検索がKibanaで機能しない

スペース、数字、特殊文字を含む長い文字列を含む「アラート」フィールドがあります。このフィールドを「not_analyzed」に設定しています。ワイルドカードクエリを使用して、次のようにクエリを発行し、必要な結果を取得できます。

POST /test-index-snort2/type-snort/_search
{
  "query": {
    "wildcard": {
      "Alert": {
        "value": "ET CNC*"
      }
    }
  }
}

Kibanaを使用して同様の検索を実装したいと思います。ただし、そうしても結果は返されません。 Kibanaでの私のクエリは次のようになります。

Alert:"ET CNC*"

これにより、次のようなquery_stringクエリが作成されます。

"query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "query_string": {
                "query": "Alert:\"ET CNC*\""
              }
            }
          ]
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "match_all": {}
            }
          ]
        }
      }
    }

ワイルドカードクエリを使用してクエリと同じクエリ結果をKibanaで取得する方法はありますか?

Alertフィールドのマッピングとエントリのサンプルを次に示します。

"Alert": {
        "type": "string",
        "index": "not_analyzed"
},

"Alert": "ET CNC Palevo Tracker Reported CnC Server TCP group 9 ",
"Alert": "ET CNC Palevo Tracker Reported CnC Server TCP group 10 ",
"Alert": "ET CNC Zeus Tracker Reported CnC Server TCP group 3 ",
15
Sgt B

#elasticsearchでのpolyfractal overのおかげで、答えがあります。デフォルトでは、query_stringはワイルドカード入力を小文字にします。これは、lowercase_expanded_terms = false設定で無効にできます。ただし、これをKibanaで設定する方法はありません。

polyfractalは、このコンテンツを小文字にするためのアナライザーを作成することを推奨しました。これにより、ワイルドカードを使用してquery_stringを利用できるようになります。ただし、フィールド値はファセット結果で小文字で表示されますが、_sourceは元のフォーマットを保持します。私にとってこれはうまく機能し、私が前進しているソリューションです。

IRC以外:

<polyfractal> id set up the analyzer like this:  tokenizer:keyword, filters: [lowercase]
<polyfractal> that'll basically give you a lowercased `not_analyzed` field.  may also want to disable norms, since you prolly dont need them either
15
Sgt B

試す

{"wildcard":{"Alert":"ET CNC*"}}

検索バーで。 query_stringで予期される形式を取得します。

10

関連するメモとして、私はこの変更を使用してkibanaでlowercase_expanded_termsを取得することができました。

diff --git a/src/app/services/querySrv.js b/src/app/services/querySrv.js
index 72e5d8b..160285c 100644
--- a/src/app/services/querySrv.js
+++ b/src/app/services/querySrv.js
@@ -102,7 +102,7 @@ function (angular, _, config, kbn) {
               .size(q.size)
               .facetFilter(ejs.QueryFilter(
                 ejs.FilteredQuery(
-                  ejs.QueryStringQuery(q.query || '*'),
+                  ejs.QueryStringQuery(q.query || '*').lowercaseExpandedTerms(false),
                   filterSrv.getBoolFilter(filterSrv.ids())
                   )))).size(0);

@@ -206,7 +206,7 @@ function (angular, _, config, kbn) {
       switch(q.type)
       {
       case 'lucene':
-        return ejs.QueryStringQuery(q.query || '*');
+        return ejs.QueryStringQuery(q.query || '*').lowercaseExpandedTerms(false);
       case 'regex':
         return ejs.RegexpQuery('_all',q.query);
       default:
@@ -281,4 +281,4 @@ function (angular, _, config, kbn) {
     self.init();
   });
2
sunfinite

私はここで最も簡単な答えは見ていません、これは:

Kibanaの検索バーでAlert:"ET CNC*"を指定すると、実際には結果が返されません。

[〜#〜]しかし[〜#〜]

引用符をドロップすると、lucenフィルターフィールドでもワイルドカード検索が機能します。さて、もちろんあなたの場合、検索クエリのスペースに問題がありますが、データセットAlert: ET*CNC*を指定すると、同じ結果が得られます。

1
Sobvan