Lucene通配符搜索

时间:2017-11-07 15:30:32

标签: search lucene wildcard kibana

我的数据看起来像这样:

CK/YZfB6XUmSOSM3IJqM2Q; Response code: 404. Elapsed: 0ms. Request: GET /marketing
4kk/TiKjYU2JY0L2N14QLg; Response code: 200. Elapsed: 10ms. Request: GET /api/monitor
vhXVsw4sBk69qv7dGE8JYw; Response code: 404. Elapsed: 0ms. Request: GET /graph-statistics 4kk/TiKjYW2JY0L2N14QLg; Response code: 200. Elapsed: 10ms. Request: GET /api/monitor

我正在尝试查询/过滤它,所以我只保留4xx响应。

我已经阅读了有关wildcards的文档,因此我希望至少有以下一个查询能够正常运行(这与Kibana中所写的一样):

message: "Response code: 4??"
message: 4??.
message: "Response code: 4*"

以下是JSON中的这些内容,以防万一转移(我为了简洁起见,我在同一个JSON中枚举了所有3个查询):

"filter" : [],
"query" : {
 "query_string" : {
  "query" : "message: \"Response code: 4??\"",
  "query" : "message: 4??.",
  "query" : "message: \"Response code: 4*\"",
  "analyze_wildcard" : true
 }
},

到目前为止,我没有运气,而且我的想法已经不多了......

1 个答案:

答案 0 :(得分:1)

根据您的问题,该文字似乎已在消息字段中编入索引。 如果您希望查询仅返回4XX响应,请尝试以下查询。

message: (Response AND code AND 4??)

此查询实质上是要求lucene获取其中包含响应代码 4xx 字样的记录。 我针对以下情况进行了测试,其中您的记录可能包含400作为经过时间的一部分。

  

.........响应代码:200经过:404ms .......

但是查询工作正常,并且没有返回这些结果,因为404的后缀为 ms 。因此,这与您对 4 ?? 的搜索不匹配。

此外,您可能必须检查字段在集合中的索引方式。它是以文本还是字符串形式存储的? 在您的代码示例中,您尚未转义,这是lucene中的特殊字符。

注意:此查询会检查文本中是否存在这些关键字,但也不一定按给定顺序检查