У меня есть два документа, настроенные в одном индексе с именем инвентарь.
- профиль (это пользователи и мобильная информация)
- p2p-отношение
Свойства отображения индекса инвентаря следующие:
{
"mappings": {
"properties": {
"type": {"type": "keyword"},
"id": {"type": "keyword"},
"sourceId": {"type": "keyword"},
"targetId": {"type": "keyword"},
"firstName": {"type": "text"},
"lastName": {"type": "text"},
"createdBy": {"type": "text"},
"p_type": {"type": "text"},
"model": {"type": "text"},
"OS": {"type": "keyword"}
}
}
}
профиль содержит следующую информацию
пользователи:
{ "type":"profile", "id" : "user1", "p_type" : "user", "firstName" : "Ashok", "lastName" : "S" }
{ "type":"profile", "id" : "user2", "p_type" : "user", "firstName" : "Arun", "lastName" : "V" }
мобильные телефоны:
{ "type":"profile", "id" : "mobile1", "p_type" : "mobile", "model" : "samsung", "OS" : "Android" }
{ "type":"profile", "id" : "mobile2", "p_type" : "mobile", "model" : "iPhone", "OS" : "iOS" }
p2p-отношение имеет, какой пользователь использовал какую мобильную информацию:
{ "type":"p2p-relation", "id" : "user1-owns-mobile1", "sourceId" : "user1", "targetId" : "mobile1", "createdBy" : "admin" }
{ "type":"p2p-relation", "id" : "user1-owns-mobile2", "sourceId" : "user1", "targetId" : "mobile2", "createdBy" : "admin" }
В нашем случае нам нужно получить список мобильных телефонов android / iOS, принадлежащих пользователю, который мы получаем как вход от клиента.
То есть, если user1 запрашивает / mymobiles? Query = os == Android, он должен перевести это в ES и ожидать
{ "type": "profile", "id": "mobile1", "p_type": "mobile", "model": "samsung", "OS": "Android"}
как результат, и если user2 запрашивает то же самое, он должен вернуть пустое значение.
Я пробовал с запросом и bool. Но это поиск только в пределах одного документа. Как этого добиться в elasti c search?