使用匹配或术语的ElasticSearch查询?

时间:2014-12-16 12:58:15

标签: elasticsearch

我使用匹配查询来搜索字段“syslog_5424”

{
  "query":{
    "filtered":{

      "query":{"match":{"syslog5424_app":"e1c28ca3-dc7e-4425-ba14-7778f126bdd6"}}
    }
  }
}

以下是查询结果:

{
took: 23,
timed_out: false,
-_shards: {
total: 45,
successful: 29,
failed: 0
},
-hits: {
total: 8340,
max_score: 17.623652,
-hits: [
-{
_index: "logstash-2014.12.16",
_type: "applog",
_id: "AUpTBuwKsotKslj7c27d",
_score: 17.623652,
-_source: {
message: "132 <14>1 2014-12-16T12:16:09.889089+00:00 loggregator e1c28ca3-dc7e-4425-ba14-7778f126bdd6 [App/0] - - Get the platform's MBean server",
@version: "1",
@timestamp: "2014-12-16T12:16:10.127Z",
host: "9.91.32.178:33128",
type: "applog",
syslog5424_pri: "14",
syslog5424_ver: "1",
syslog5424_ts: "2014-12-16T12:16:09.889089+00:00",
syslog5424_host: "loggregator",
syslog5424_app: "e1c28ca3-dc7e-4425-ba14-7778f126bdd6",
syslog5424_proc: "[App/0]",
syslog5424_msg: "Get the platform's MBean server",
syslog_severity_code: 5,
syslog_facility_code: 1,
syslog_facility: "user-level",
syslog_severity: "notice",
@source_host: "%{syslog_hostname}",
@message: "%{syslog_message}"
}
},

...

但是当我将“匹配”改为“术语”时,我什么都没得到。字段syslog5424_app的内容正好是“e1c28ca3-dc7e-4425-ba14-7778f126bdd6”,但我找不到它使用“term”。任何一种建议都会很好。

    {
      "query":{
        "filtered":{

          "query":{"term":{"syslog5424_app":"e1c28ca3-dc7e-4425-ba14-7778f126bdd6"}}
        }
      }
    }

1 个答案:

答案 0 :(得分:4)

您在字段 syslog_5424 上使用了什么样的分析器?

如果它是standard analyser,则数据可能会被分解为搜索字词。 例如

e1c28ca3-dc7e-4425-ba14-7778f126bdd6

分解为:

e1c28ca3
dc7e
4425
ba14
7778f126bdd6

当您使用匹配查询时,您的搜索字符串也会被细分 - 因此匹配即可。

但是,当您使用字词查询时,将不会分析搜索字符串。即你在5个人的条款中寻找e1c28ca3-dc7e-4425-ba14-7778f126bdd6 - 它不匹配

所以 - 我的建议是更新您的映射以使用not_analyzed - 您通常不需要部分UUID,因此请关闭此字段的所有分析。

相关问题