elasticsearch 通配符搜索不使用';我不在基巴纳工作,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 通配符搜索不使用';我不在基巴纳工作,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 通配符搜索不使用';我不在基巴纳工作

elasticsearch 通配符搜索不使用';我不在基巴纳工作,elasticsearch,kibana,elasticsearch,Kibana,我有一个字段“Alert”,它包含一个长字符串,其中包含空格、数字和特殊字符。我将此字段设置为“未分析”。使用通配符查询,我可以发出如下查询,并获得所需的结果 POST /test-index-snort2/type-snort/_search { "query": { "wildcard": { "Alert": { "value": "ET CNC*" } } } } 我想使用Kibana实现类似的搜索。但是,这样做不会返回任

我有一个字段“Alert”,它包含一个长字符串,其中包含空格、数字和特殊字符。我将此字段设置为“未分析”。使用通配符查询,我可以发出如下查询,并获得所需的结果

POST /test-index-snort2/type-snort/_search
{
  "query": {
    "wildcard": {
      "Alert": {
        "value": "ET CNC*"
      }
    }
  }
}
我想使用Kibana实现类似的搜索。但是,这样做不会返回任何结果。我在Kibana的查询如下:

Alert:"ET CNC*"
这又会创建一个查询\u字符串查询,如下所示:

"query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "query_string": {
                "query": "Alert:\"ET CNC*\""
              }
            }
          ]
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "match_all": {}
            }
          ]
        }
      }
    }
有没有一种方法可以通过查询字符串查询在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 ",

多亏了elasticsearch中的polyfractal,我有了答案。默认情况下,查询字符串将使用小写通配符输入。这可以通过小写字母\u expanded\u terms=false设置禁用。然而,在Kibana没有办法设定这个

polyfractal建议我创建一个分析器,将此内容小写。这将允许我使用带有通配符的查询字符串,但限制是字段值将以小写形式出现在facet结果中,但_源将保留原始格式。对我来说,这是一个很好的解决方案,我正在推进

除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
id如下设置分析器:标记器:关键字,过滤器:[小写]
这基本上会给你一个小写的'not_analysisted'字段。可能还想禁用规范,因为您通常也不需要它们

在一个相关的注释中,我能够在kibana中使用小写的扩展术语来处理此更改:

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();
   });
试一试

在搜索栏中。
您将获得查询字符串中的预期格式。

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

如果在Kibana的搜索栏中指定
警报:“ET CNC*”
,它确实不会返回任何结果

但是

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

语句“默认情况下,查询字符串将使用小写通配符输入”非常有用。然而,我很困惑。如果我想要Mozilla的httpUserAgent,我的查询可以是
httpUserAgent:*ozilla*
,也可以是
*Mozilla*
。两个查询都返回包含“Mozilla”的结果,但
httpUserAgent:*Mozilla*
不返回任何内容。这是为什么?在Kibana 4中,“设置”>“高级”包含
query:queryString:options
,我在其中添加了
“小写扩展术语”:false
{"wildcard":{"Alert":"ET CNC*"}}