2016-11-08 2 views
0

типа I есть индекс, содержащий документы, которые выглядят что-то вроде этого (ненужных полей опущенных)Elasticsearch «автообъединение» операция

{ 
_id: String, 
... 
relatedIds: [ String ] 
} 

relatedIds рекурсивно со ссылкой на _id самих документов.

Я хочу написать запрос, который будет возвращать только идентификаторы из массива relatedIds, которые не являются _id документа.

В аннотациях, я хочу захватить все эти идентификаторы, выполнить некоторые вычисления, так что в конце каждый идентификатор в relatedIds ссылается на документ в индексе.

ответ

1

Если поле идентификатора также содержится в исходном документе, вы можете сделать это следующим образом:

POST index/_search 
{ 
    "script_fields": { 
    "relatedIdsLessId": { 
     "script": { 
     "inline": "doc. relatedIds.values - doc.id.value" 
     } 
    } 
    } 
} 

Это будет вычислять новое поле с именем relatedIdsLessId, который будет содержать только соответствующие идентификаторы, которые не являются ID самого документа.

Примечание: вы должны убедиться, что enable dynamic scripting, если это еще не сделано.

+0

Встроенные скрипты по умолчанию отключены. – schellingerht

+0

Я еще не смог попробовать это, так как упомянутые выше встроенные скрипты отключены по умолчанию, и у меня нет доступа (в настоящее время) к файлу конфигурации для ES, на который я нацелен. –

Смежные вопросы