【问题标题】:Query Lucene on Kibana Discover not working as intended?在 Kibana Discover 上查询 Lucene 未按预期工作?
【发布时间】:2019-08-12 02:59:25
【问题描述】:

我正在尝试在我的 logstash 索引的“主机”属性上搜索服务器名称。

我正在 Kibana 的“发现”选项卡上进行搜索。

当我在搜索栏中录制 sl00pm 时,我得到了:

没有找到结果

但是当我添加星号(*)并搜索 sl00pm* 时,我得到了这个:

主机:sl00pm.soo85.poly-vale.intra 日期:2019-03-20 15:23:10,591

我不明白为什么。

但是当我对另一个服务器名称 slzq85 执行相同的操作时,我得到了这个:

主机:slzq85.soo85.poly-vale.intra 日期:21/Mar/2019:09:24:56 +0100

这正是我所期待的。

这是我在 LogStash 上的索引的定义:

{
 "logstash-2019.03.20": {
  "aliases": {},
  "mappings": {
   "apache-access": {
    "_all": {
     "enabled": true,
     "norms": false
    },
    "dynamic_templates": [
     {
      "message_field": {
       "match": "message",
       "match_mapping_type": "string",
       "mapping": {
        "index": "analyzed",
        "omit_norms": true,
        "type": "string"
       }
      }
     },
     {
      "string_fields": {
       "match": "*",
       "match_mapping_type": "string",
       "mapping": {
        "fields": {
         "raw": {
          "ignore_above": 256,
          "index": "not_analyzed",
          "type": "string"
         }
        },
        "index": "analyzed",
        "omit_norms": true,
        "type": "string"
       }
      }
     }
    ],
    "properties": {
     "@timestamp": {
      "type": "date"
     },
     "@version": {
      "type": "keyword"
     },
     "date": {
      "type": "text",
      "norms": false,
      "fields": {
       "raw": {
        "type": "keyword",
        "ignore_above": 256
       }
      }
     },
     "host": {
      "type": "text",
      "norms": false,
      "fields": {
       "raw": {
        "type": "keyword",
        "ignore_above": 256
       }
      }
     }
    }
   },
  },
  "settings": {
   "index": {
    "refresh_interval": "5s",
    "number_of_shards": "5",
    "provided_name": "logstash-2019.03.20",
    "creation_date": "1553036402235",
    "number_of_replicas": "1",
    "uuid": "mCSFLYGETPm6qbgOwShHog",
    "version": {
     "created": "5060399"
    }
   }
  }
 }
}

还有版本:

version": {
 "number": "5.6.3",
 "lucene_version": "6.6.1"
},

你能告诉我为什么我的结果不好?

我想补充一点,我正在使用映射类型,并且在我的索引的不同映射类型中具有相同的属性,但具有与上述相同的定义

问候

【问题讨论】:

    标签: elasticsearch lucene logstash kibana


    【解决方案1】:

    这种行为的原因是分析器断词的地方。标准分析器根据UAX #29 中规定的规则分词。尤其是规则 WB6 和 WB11,这里需要注意。

    基本上,它不会在带有 '.' 的字母上中断。在中间(例如:“ab.cd”),或带有“。”的数字在中间(例如:“12.34”),但它会中断由“。”分隔的数字和字母。 (例如:“12.cd”)。

    因此,在您的索引中,“sl00pm.soo85”被索引为单个标记,但“slzq85.soo85”被分成两个标记:“slz85”和“soo85”。

    标准分析器专为处理文本而设计。单词和句子。对于您正在查看的标识符,您可以尝试使用不同的分析器,也许是 PatternAnalyzer

    【讨论】:

    • 感谢您的回答。你的解释很有道理。这对我有很大帮助。
    • 我可能对模式分析器还有其他问题。因为我在生产环境中工作。我想知道使用此分析仪是否有任何风险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多