使用通配符过滤掉记录
Filter out records with a wildcard
我正在使用 ElasticSearch + Kibana 来记录错误。在 Kibana 仪表板中,我可以通过单击带有减号的放大镜按特定字段筛选记录。然后它生成以下查询以排除:
{
"query": {
"match": {
"message": {
"query": "Invalid HTTP_HOST header: '12.34.567.89'. You may need to add '12.34.567.89' to ALLOWED_HOSTS.",
"type": "phrase"
}
}
}
}
现在我想为所有可能的 IP 地址排除这些记录,所以我需要一个通配符(或正则表达式)。我找到了有关通配符和正则表达式的文档 here。但是,它们与上面使用的语法不同。
如果我将上面的查询更改为文档中的查询,它根本不会过滤它。示例:
{
"query": {
"wildcard": {
"message": "Invalid HTTP_HOST header: *"
}
}
}
如果我尝试组合它们,我会收到解析错误:Discover: [parsing_exception] [match] unknown token [START_OBJECT] after [query], with { line=1 col=444 }
。示例:
{
"query": {
"match": {
"message": {
"query": {
"wildcard": {
"message": "Invalid HTTP_HOST header: *"
}
},
"type": "phrase"
}
}
}
}
我尝试了更多的组合,但无法正常工作。有什么想法吗?
这听起来很奇怪,但由于大写文本,它似乎不起作用。
试试这个:
{
"query": {
"wildcard": {
"message": "*http_host*"
}
}
另一种可能性是像这样使用 regexp
query,但是根据您拥有的数据量,它会变得 CPU 密集:
POST _search
{
"query": {
"regexp": {
"message.keyword": {"value":"Invalid HTTP_HOST header: '<1-999>\.<1-999>\.<1-999>\.<1-999>'\. You may need to add '<1-999>\.<1-999>\.<1-999>\.<1-999>' to ALLOWED_HOSTS\.",
"flags": "ALL"}
}
}
}
在为数据编制索引并将其拆分为更易于搜索的部分之前,最好先分析数据。
点击添加过滤器然后点击对话框右上角的编辑为查询DSL:
案例一:
字符串中包含 http_host 一词的区分大小写的搜索。
通配符支持 ?或 * 仅正则表达式功能。
{
"wildcard": {
"message.keyword": "*http_host*"
}
}
案例二:
在字符串中包含单词 http_host 的不区分大小写的搜索。
{
"query": {
"multi_match": {
"query": "http_host",
"fields": [
"message"
],
"type": "best_fields"
}
}
}
我正在使用 ElasticSearch + Kibana 来记录错误。在 Kibana 仪表板中,我可以通过单击带有减号的放大镜按特定字段筛选记录。然后它生成以下查询以排除:
{
"query": {
"match": {
"message": {
"query": "Invalid HTTP_HOST header: '12.34.567.89'. You may need to add '12.34.567.89' to ALLOWED_HOSTS.",
"type": "phrase"
}
}
}
}
现在我想为所有可能的 IP 地址排除这些记录,所以我需要一个通配符(或正则表达式)。我找到了有关通配符和正则表达式的文档 here。但是,它们与上面使用的语法不同。
如果我将上面的查询更改为文档中的查询,它根本不会过滤它。示例:
{
"query": {
"wildcard": {
"message": "Invalid HTTP_HOST header: *"
}
}
}
如果我尝试组合它们,我会收到解析错误:Discover: [parsing_exception] [match] unknown token [START_OBJECT] after [query], with { line=1 col=444 }
。示例:
{
"query": {
"match": {
"message": {
"query": {
"wildcard": {
"message": "Invalid HTTP_HOST header: *"
}
},
"type": "phrase"
}
}
}
}
我尝试了更多的组合,但无法正常工作。有什么想法吗?
这听起来很奇怪,但由于大写文本,它似乎不起作用。
试试这个:
{
"query": {
"wildcard": {
"message": "*http_host*"
}
}
另一种可能性是像这样使用 regexp
query,但是根据您拥有的数据量,它会变得 CPU 密集:
POST _search
{
"query": {
"regexp": {
"message.keyword": {"value":"Invalid HTTP_HOST header: '<1-999>\.<1-999>\.<1-999>\.<1-999>'\. You may need to add '<1-999>\.<1-999>\.<1-999>\.<1-999>' to ALLOWED_HOSTS\.",
"flags": "ALL"}
}
}
}
在为数据编制索引并将其拆分为更易于搜索的部分之前,最好先分析数据。
点击添加过滤器然后点击对话框右上角的编辑为查询DSL:
案例一: 字符串中包含 http_host 一词的区分大小写的搜索。 通配符支持 ?或 * 仅正则表达式功能。
{
"wildcard": {
"message.keyword": "*http_host*"
}
}
案例二: 在字符串中包含单词 http_host 的不区分大小写的搜索。
{
"query": {
"multi_match": {
"query": "http_host",
"fields": [
"message"
],
"type": "best_fields"
}
}
}