Elasticsearch match_phrase для нескольких полей
Я новичок в Elasticsaerch, и я борюсь прямо сейчас. Я пытаюсь найти все данные, которые имеют точную фразу в поле eset. Мой запрос выглядит так, и он работает:
{
"query" : {
"match_phrase" : {
"eset": "Win32/Kryptik.DLT"
}
}
}
Теперь мне также нужно несколько полей, чтобы иметь точные значения, например, в полях eset и registries, так что теоретически это должно выглядеть так:
{
"query" : {
"match_phrase" : {
"eset": "Win32/Kryptik.DLT"
},
"match_phrase" : {
"registries": 3
}
}
}
Но очевидно, что вы не можете сделать это в Elasticsearch. Соответствие, похоже, не работает с несколькими полями. Есть ли способ, как это сделать? Мне нужно сохранить верхний и нижний регистр. Просто точные значения. Термин, кажется, не работает, из-за прописных и строчных букв, а также слешей, которые используются в моих данных.
Я перепробовал все, что нашел, но пока ничего не получалось. Я использую Python API версии 6.1.1 и Elasticsearch на версии 5.6.6, если это имеет значение.
2 ответа
Я думаю, что я понял это сам, решение этого было:
{
"query": {
"bool": {
"must": [
{ "match": { "eset": { "query": "Win32/Kryptik.DLT", "type": "phrase" }}},
{ "match": { "registries": { "query": 3, "type": "phrase" }}}
]
}
}
}
Но я все еще открыт для других решений, особенно с точки зрения SLASHES.
Если вам нужно точное совпадение входной строки, используйте.
match_phrase
искать слова из входной строки поиска в заданном порядке без каких-либо слов между ними.
match
делает нечеткое совпадение слов из входной строки. См.: https://discuss.elastic.co/t/searching-fields-for-specific-values/64004/2
{
"query": {
"bool": {
"must": [
{ "match_phrase": { "eset": { "query": "Win32/Kryptik.DLT", "type": "phrase" }}},
{ "match_phrase": { "registries": { "query": 3, "type": "phrase" }}}
]
}
}
}
В качестве альтернативы можно использовать, если вы ищете точное значение. Однако, если точное значение для поиска неизвестно, избегайте использования
term
. Источник: реферальные точки
3
а также
4
подраздела (
avoid-term-query-text-fields
) этой страницы: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html#avoid-term-query-text-fields