Найдите документы, для которых значение поля не существует в других документах, с помощью запроса ElasticSearch. - PullRequest
0 голосов
/ 19 июня 2019

У меня проблема с получением всех документов, у которых нет соответствующих других журналов по значению поля.Буду признателен за любую помощь.Проще всего объяснить с помощью примера:

У меня есть следующие 5 документов:

DOC1:

{
     message: **Step1**,
     id: 100
}

DOC2:

{
     message: **Step2**,
     id: 100
}

DOC3:

{
     message: **Step1**,
     id: 200
}

DOC4:

{
     message: **Step2**,
     id: 300
}

DOC5:

{
     message: **StepX**,
     id: 400
}

Итак, все, что я хотел бы получить в ответ на запрос, это все документыгде Step1 не имеет соответствующего Step2, где значение id одинаково.В приведенном ниже примере это ( ОТВЕТ Я ХОЧУ) : DOC3:

{
     message: Step1,
     id: 200
}

То, что я пробовал до сих пор, не является желаемым результатом.Это возвращает количество документов по идентификатору и возрастающему порядку, но поскольку у нас есть много других шагов, это не нормально, и результаты с количеством 1 не всегда будут правильными.

GET index/_search
{
      "size": 0, 
      "aggs" : {
          "langs" : {
              "terms" : { 
                    "field" : "id",  
                    "size" : 10, 
                    "order": {
                      "_count": "asc"
                     }
               }
          }
     } 
}

БОЛЬШЕ ДЕТАЛЕЙ В ответ мне нужны документы, которые не имеют 2 документа, связанных с одним полем идентификатора (каждый результат должен иметь только 1 документ с соответствующим идентификатором и message = Step1).

1 Ответ

0 голосов
/ 19 июня 2019

Попробуйте это ...

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "id": "x"
          }
        }
      ],
      "must_not": [
        {
          "exists": {
            "field": "message"
          }
        }
      ]
    }
  }
}
...