Мультифильтр вложенных данных Elasticsearch - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть структура данных, которая выглядит следующим образом:

"dictionaryProximities": [
     {
       "proximity": 0.32427,
       "topicDictionaryName": "Electrical",
     },
     {
       "proximity": 0.32141,
       "topicDictionaryName": "Indoor Air Quality",
     },
     {
       "proximity": 0.7321,
       "topicDictionaryName": "Smart Home Technology",
     },

Я хочу создать фильтр / запрос, который будет возвращать все файлы, где близость «технологии умного дома» больше значения,скажем 0,7.

Прямо сейчас у меня есть запрос:

{
  "query": {
    "nested": {
      "path": "dictionaryProximities",
      "query": {
        "match": {
          "dictionaryProximities.topicDictionaryName": {
            "query": "Smart Home Technology",
            "type": "phrase"
          }
        }
      }
    }
  }
} 

, сложенный с запросом:

{
  "query": {
    "nested": {
      "path": "dictionaryProximities",
      "query": {
        "range": {
          "dictionaryProximities.proximity": {
            "gte": 0.7,
            "lt": 1
          }
        }
      }
    }
  }
}

Возвращает все файлы с близостью выше 0,7 и содержат имя Умный домТехнология.Это очень отличается от того, что я хочу, это все файлы, которые имеют близость выше 0,7 ТОЛЬКО для технологии Smart Home.

Мой вопрос: есть ли способ объединить эти два запроса таким образом, чтобы достичь желаемого результата?Возможна ли эта задача, так как близость и имя находятся на одном уровне?Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 15 февраля 2019

Разобрался.

{
  "query": {
    "nested": {
      "path": "dictionaryProximities",
      "query": {
        "bool": {
         "must": [
            {"match": {"dictionaryProximities.topicDictionaryName": "Windows and Doors"}},
            {"range": {"dictionaryProximities.proximity": {"gt": "0.6", "lt": "1.0"}}}
                 ]
          }
          }
        }
      }
    }
...