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

Другие вопросы по тегам