Поиск записей в упругом поиске с набором значений для каждого поля.
У меня есть набор записей в упругом поиске. Я хочу сравнить 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