18

我有一个“警报”字段,其中包含一个包含空格、数字和特殊字符的长字符串。我将此字段设置为“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": {
        "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

4 回答 4

15

感谢 #elasticsearch 中的 polyfractal,我有了答案。默认情况下,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
于 2014-03-28T16:52:14.763 回答
12

尝试

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

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

于 2016-04-20T07:57:15.057 回答
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();
   });
于 2014-09-22T13:27:23.867 回答
1

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

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

如果去掉引号,通配符搜索也可以在 lucen 过滤器字段中使用。现在,当然,在您的情况下,搜索查询中的空间是有问题的,但是鉴于您的数据集会Alert: ET*CNC*产生相同的结果。

于 2019-01-30T13:58:00.277 回答