【问题标题】:Lucene wildcard searchLucene 通配符搜索
【发布时间】:2018-04-20 01:46:32
【问题描述】:

我的数据如下所示:

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
 }
},

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

【问题讨论】:

    标签: search lucene wildcard kibana


    【解决方案1】:

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

    message: (Response AND code AND 4??)
    

    这个查询本质上是要求 lucene 获取包含 responsecode4xx 字样的记录。 我针对以下情况进行了测试,您的记录可能包含 400 作为 Elapsed time 的一部分。

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

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

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

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

    【讨论】:

    • 此查询似乎搜索具有完全该字符串(带有“AND”)的邮件,而不是通过 AND 关键字添加新的搜索词...跨度>
    • 我已编辑删除引号并使用大括号。您是否通过任何 lucene API 或 Kibana UI 运行查询?
    • 这绝对是我迄今为止最接近的!唯一剩下的(轻微)问题是它还匹配位于消息前面的 Guid 中的随机 4xx;我想那是因为我无法强制执行关键字存在顺序?有什么办法可以解决这个问题?
    • 也许你应该尝试使用正则表达式语法搜索以匹配所需的格式和给定的顺序
    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多