Поиск записей в упругом поиске с набором значений для каждого поля.

У меня есть набор записей в упругом поиске. Я хочу сравнить 1 конкретную запись (она у меня есть в переменной) с остальными записями, присутствующими в индексе.

Я хочу сравнить значения для каждого поля в отдельности со значениями из записи, которая у меня есть.

Например, Если у меня есть

{
  "person" : [
    {
      "name" : "asd",
      "awdawD" : "asdawd"
    },
    {
      "name" : "adw ed",
      "awdawD" : "asdawd"
    },
    {
      "name" : "a wra",
      "awdawD" : "asdawd"
    },
    {
      "name" : "ca eyy",
      "awdawD" : "asdawd"
    }
  ]
}

и моя запись

[
  {
    "name" : "asd",
    "awdawD" : "asdawd"
  },
  {
    "name" : "s tr",
    "awdawD" : " tjy"
  }
]

Я хочу сравнить имя с именем, awdawD с awdawD и получить результат.

Так как у меня есть массив Persons, мне нужно будет создать цикл для каждого элемента в моих записях, чтобы сравнить его с записями в упругом поиске?

Как я могу сделать это в упругом поиске без цикла?

Сравнивая каждое имя и awdawD в отдельности.

1 ответ

Я знаю, что это, вероятно, не элегантное решение, которое вы ищете (которого, я думаю, не существует), но вы всегда можете сделать что-то вроде этого:

POST /test_index/_search
{
   "query": {
      "filtered": {
         "filter": {
            "or": {
               "filters": [
                  {
                     "and": {
                        "filters": [
                           {
                              "term": {
                                 "name": "asd"
                              }
                           },
                           {
                              "term": {
                                 "awdawD": "asdawd"
                              }
                           }
                        ]
                     }
                  },
                  {
                     "and": {
                        "filters": [
                           {
                              "term": {
                                 "name": "s tr"
                              }
                           },
                           {
                              "term": {
                                 "awdawD": " tjy"
                              }
                           }
                        ]
                     }
                  }
               ]
            }
         }
      }
   }
}

или это

POST /test_index/_search
{
   "query": {
      "bool": {
         "should": [
            {
               "bool": {
                  "must": [
                     {
                        "match": {
                           "name": "asd"
                        }
                     },
                     {
                        "match": {
                           "awdawD": "asdawd"
                        }
                     }
                  ]
               }
            },
            {
               "bool": {
                  "must": [
                     {
                        "match": {
                           "name": "s tr"
                        }
                     },
                     {
                        "match": {
                           "awdawD": " tjy"
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}

Оба этих запроса возвращают только ваш первый документ (один или другой может быть предпочтительным в зависимости от настроек анализа).

Вот код, который я использовал, чтобы проверить это:

http://sense.qbox.io/gist/52de7f75e685486a63d18bd387cbb02d03cc6feb

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