Я новичок в Elasticsearch и пытаюсь написать несколько запросов, которые не работают. У меня есть информация о людях, и я хочу запросить людей на основе некоторых атрибутов.
Вот часть сопоставления в Elasticsearch:
"properties": {
"doc": {
...
"languages": [{
"language": {
"type": "text",
"null_value": "NULL"
},
"level": {
"type": "integer",
"null_value": "NULL"
}
}],
...
}
}
Например, я хочу отфильтровать всех людей, которые говорят на английском на уровне выше 3 и на японском на уровне выше . 2.
Я уже пробовал этот подход, который не дает ожидаемого результата.
"size": 1000,
"from": 0,
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{"match": {"languages.language": "english"}},
{"range": {"languages.search_value": {"gt": 3}}}
]
}
},
{
"bool": {
"must": [
{"match": {"languages.language": "japanese"}},
{"range": {"languages.search_value": {"gt": 2}}}
]
}
}
]
}
}
Приведенный выше запрос возвращает всех людей, говорящих на английском и японском языках, но уровни этих языков не совпадают. Есть люди, которые говорят по-английски с 4-м уровнем (что нормально), но по-японски с 1-м уровнем (что не является нормальным) и по-немецки с 5-м уровнем. Я думаю, проблема в том, что вместо того, чтобы искать желаемый уровень только для указанных языков , мой запрос ищет уровни на всех языках, на которых говорят люди.
Итак, результат, который я ожидаю от запроса, состоит в том, чтобы получить всех людей, которые говорят по-английски с уровнем 4 или 5 и по-японски с уровнем 3, 4 или 5 (оба в одно и то же время) . Меня не волнуют другие языки, на которых они говорят, и их уровни.
Любая помощь или идея, как я могу решить эту проблему, приветствуется.