У меня есть elasticsearch query
, который выглядит так ...
"query": {
"bool": {
"must": [{
"match": {"attrs.name": "username"}
}, {
"match": {"attrs.value": "johndoe"}
}]
}
}
... и документы в индексе, которые выглядят следующим образом:
{
"key": "value",
"attrs": [{
"name": "username",
"value": "jimihendrix"
}, {
"name": "age",
"value": 23
}, {
"name": "alias",
"value": "johndoe"
}]
}
Что из следующего действительно означает этот запрос?
- Документ должен содержать
attrs.name = username
ИЛИattrs.value = johndoe
- Или документ должен содержать оба,
attrs.name = username
Иattrs.value = johndoe
, даже если они могут соответствовать различным элементам в массивеattrs
(это будет означать, что документ, указанный выше, будет соответствовать запросу ) - Или документ должен содержать оба
attrs.name = username
Иattrs.value = johndoe
, но они должны соответствовать одному и тому же элементу в массивеattrs
(что будет означать, что документ, указанный выше, не будет соответствовать запрос)
Кроме того, как мне написать запрос для выражения №3 из приведенного выше списка, т. е. документ должен соответствовать, только если единственный элемент внутри массива attrs
совпадает с обоими следующие условия:
- attrs.name = имя пользователя
- attrs.value = johndoe
nested
, получил ожидаемый результат, обратитесь к моему ответу. Сопоставление означает, как вы моделируете свои данные в Elasticsearch, т.е. какой тип полей использовать, какой анализатор использовать, вы можете думать об этом как о табличном определении SQL, см. elastic.co/guide/en/elasticsearch/reference/current/ для получения дополнительных сведений. - person   schedule 28.05.2020