#elasticsearch #kibana
#elasticsearch #kibana
Вопрос:
Я создал этот KQL, который работает нормально, я ищу строку error
в message
поле, и одно и то же поле не должно содержать EOF
. Здесь я использовал must и must not. Теперь я хочу добавить дополнительное условие (И), где поле (kubernetes.pod.name ) содержит test
.
{
"size": 1,
"query": {
"bool": {
"must": [
{
"match": {
"message": {
"query": "error",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1
}
}
},
{
"range": {
"@timestamp": {
"from": "now-10000m",
"to": null,
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
}
],
"must_not": [
{
"match_phrase": {
"message": {
"query": "EOF",
"slop": 0,
"zero_terms_query": "NONE",
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
]
}
Комментарии:
1. Кстати, KQL — это сокращение от Kibana Query Language , и то, что вы получили выше, — это запрос DSL (язык, специфичный для домена), а не KQL
![]()
Ответ №1:
Просто расширьте must
массив match
запросом, чтобы применить еще один логический И:
{
"size": 1,
"query": {
"bool": {
"must": [
{
"match": {
"kubernetes.pod.name": "test" <--
}
},
{
"match": {
"message": {
"query": "error",
...
}
}
},
{
"range": {
"@timestamp": {
...
}
}
}
],
"must_not": [
{
"match_phrase": {
"message": {
"query": "EOF",
...
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
...
}
Комментарии:
1. Я пробовал это, но это не работает. Когда я удалил недавно добавленный блок. Я вижу журналы с kubernetes.pod.name : тест-XXXXX. Также, когда я заменяю значение в новом блоке с test на test-XXXXX. Я вижу журналы. Так что, я думаю, это не проверка содержимого, а точная строка
2. Каково отображение этого поля?
3. «сопоставления»: { «kubernetes.pod.name » : { «полное имя_имя» : «kubernetes.pod.name «, «сопоставление» : { «имя» : { «тип»: «ключевое слово», «ignore_above» : 1024 } } } }
4. Спасибо — да, я так и думал — сопоставление ключевых слов поддерживает только полные и точные совпадения. У вас есть 2 варианта: переиндексировать все как
text
keyword
в виде нескольких полей или использоватьprefix
запрос или дажеregexp
запрос.5. Я использовал регулярное выражение, но оно не работает. Как я могу переиндексировать?