通配符搜索在Kibana中不起作用

时间:2014-03-28 16:06:13

标签: elasticsearch 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": {}
            }
          ]
        }
      }
    }

有没有办法通过使用通配符查询的query_string查询在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 ",

4 个答案:

答案 0 :(得分:15)

感谢#elasticsearch中的polyfractal结束,我有一个答案。默认情况下,query_string将小写通配符输入。可以通过lowercase_expanded_terms = false设置禁用此功能。但是,没有办法在Kibana中设置它。

polyfractal建议我创建一个分析器来小写这个内容。这将允许我使用带有通配符的query_string,其限制是字段值将在facet结果中以小写形式出现,但_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

答案 1 :(得分:10)

尝试

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

在搜索栏中。 您将在query_string中获得预期的格式。

答案 2 :(得分:2)

在相关的说明中,我能够在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();
   });

答案 3 :(得分:0)

我在这里看不到最简单的答案:

如果您在Kibana的搜索栏中指定Alert:"ET CNC*",则它实际上不会返回任何结果,

但是

如果您删除引号,通配符搜索也会在lucen过滤器字段中起作用。 现在,当然,在您的情况下,搜索查询中的空间是有问题的,但是给定数据集Alert: ET*CNC*将产生相同的结果。