В упругом поиске я нужен все документы, в которых иденты являются результатом выполнения другой elasticsearch запроса, как этогоподзапросов в ElasticSearch
{
"size": 200,
"query": {
"bool": {
"must": {
"match": {
"targetId": {
"query": 1234
}
}
}
}
},
"_source": {
"includes": [
"userId"
],
"excludes": []
}
}
Если выполнены в SQL будет иметь запрос, похожий на тот, внизу.
select * from mytable where userId in (select userId from mytable where targetId = 1234);
Но I'am не в состоянии сформировать подобный запрос elasticsearch, есть другие способ реализации вложенных запросов в elasticsearch.
Для разработки этой проблемы, я добавил данные ниже
"hits": [
{
"_index": "idx0",
"_type": "1234",
"_id": "1235-1486716882293",
"_source": {
"targetid": "42644",
"userid": "15784334830333693",
}
},
{
"_index": "idx0",
"_type": "1234",
"_id": "1235-1486716882293",
"_source": {
"data": {
"info":"user data available"
},
"userid": "15784334830333693",
}
},
{
"_index": "idx0",
"_type": "1234",
"_id": "1235-1486716882293",
"_source": {
"data": {
"info":"user data available"
},
"userid": "00000034830333693",
}
}
]
Как вы можете видеть из приведенных выше данных, документ пользователя имеет данные, которые содержат только идентификатор пользователя, а также информацию о пользователе, которые достигли целей хранится в другом документе, который имеет targetid и userid.
Чтобы узнать пользователь, достигли целей, я должен выполнить два запрос 1.Get UserIds ES с помощью targetid, что у меня есть, 2.Get всех документов, которые имеют идентификатор пользователя от предыдущего запроса.
Есть ли другой способ сделать это в одном запросе.
Вы можете уйти с помощью [механизма поиска условий] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html#query-dsl-terms -Погляди) – Val