Как я могу ограничить результаты эластичного поиска, чтобы включить только документы родительского типа? - PullRequest
0 голосов
/ 09 ноября 2018

Я немного застрял в этой проблеме и изо всех сил пытаюсь найти решение:

У меня есть два типа записей в моем общем индексе Elasticsearch, к которым присоединяется родитель: дочерние отношения.

Я хотел бы получать только документы типа «родитель», но также включать все «родительские» документы, которые на самом деле не имеют дочерних документов.

Есть ли способ реализовать это?

С наилучшими пожеланиями, Stefan

1 Ответ

0 голосов
/ 09 ноября 2018

Ниже запрос - это то, что вы ищете. Я использовал запрос Bool

Допустим, у вас есть приведенное ниже отображение для parent-child, т. Е. У вас есть question, а его дочерние элементы answer.

Отображение

PUT <your_index_name>
{
  "mappings": {
    "_doc": {
      "properties": {
        "my_join_field": { 
          "type": "join",
          "relations": {
            "question": "answer" 
          }
        }
      }
    }
  }
}

Запрос

POST <your_index_name>/_search
{  
   "query":{  
      "bool":{  
         "must":[  
            {  "term":{ "my_join_field":"question" }},
            {  
               "bool":{  
                  "must_not":[  
                     {  "has_child":{  
                           "type":"answer",
                           "query":{ "match_all":{} }
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}

Приведенный выше запрос будет отображать все родительские документы, т.е. question, у которых нет дочерних элементов, т. Е. answer.

Обратите внимание, что если вы конвертируете must_not в must в приведенном выше запросе, он вернет вам все родительские документы, т.е. question, у которых есть дочерние элементы, т.е. answer;)

Теперь, если вам нужны только родительские документы. т.е. все родительские документы, ваш запрос будет просто в следующем формате:

Запрос всех родительских документов

POST <your_index_name>/_search
{  
   "query":{  
      "bool":{  
         "must":[  
            {  
               "term":{  
                  "my_join_field":"question"
               }
            }
         ]
      }
   }
}

ИЛИ это может быть просто, как показано ниже:

POST <your_index_name>/_search
{
  "query": {
    "term": {
      "my_join_field": "question"
    }
  }
}

В основном я реализовал Term Queries .

Дайте мне знать, если это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...