Lucene 通配符搜索

Lucene wildcard search

我有这样的数据:

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

我正在尝试 query/filter 解决,所以我只保留 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
 }
},

到目前为止我运气不好而且我 运行 没有想法...

根据您的问题,文本似乎已在字段 message 中编入​​索引。 如果您希望查询 return 只有 4XX 响应,请尝试以下查询。

message: (Response AND code AND 4??)

这个查询本质上是要求 lucene 获取包含单词 responsecode4xx[= 的记录29=] 在其中。 我针对以下情况进行了测试,您的记录可能包含 400 作为经过时间的一部分。

......... Response code:200 Elapsed:404ms.......

但是查询工作正常并且没有 return 这些结果,因为 404 以 ms 作为后缀。因此,这与您搜索 4??.

不匹配

此外,您可能需要检查该字段在您的集合中的索引方式。它是存储为文本还是字符串? 在您的代码示例中,您没有转义 : 这是 lucene 中的一个特殊字符。

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