У нас есть структура веб-контента «S» с полем «Документ и медиа».
Мы создали веб-контент с именем «W» на основе предыдущей структуры «S» с вложенным файлом слова «a» с текстом «hello» внутри него.
Мы знаем, что lucene/ElasticSearch индексирует содержимое вложения, если это, например, файл word или pdf.
Итак, мы выполняем поиск в lucene (используя booleanQuery, подбирая номер журнала), чтобы получить веб-контент S, соответствующий поисковому запросу «привет».
Но мы увидели, что lucene, фильтруя journalArticle, возвращает json-подобный объект с этими данными:
"ddm__keyword__87940__attachements_en_US":[ {\"groupId\":\"115863\",\"название\":\"a.word\",\"тип\":\"документ\",\"uuid\": \"dffd1d3d-8b78-a64c-4d0c-8d004d24cb75\"}]
У него есть только ссылка на объект DLFileEntry.
Есть ли способ с помощью всего одного запроса получить журнальную статью, соответствующую вложению слова?
Мы видели, что Liferay предлагает «индексирующий постпроцессор», который может помочь нам хранить данные DLFileEntry внутри нового поля нашего веб-контента, но индексация DLFileEntry является асинхронной.
Что мы можем сделать ?
IndexSearcherHelperUtil.search(searchContext, searchQuery);
изcom.liferay.portal.kernel.search.IndexSearcherHelperUtil
Мы добавляем нашу структуру и ограничение journalArticle к объекту searchContext, см. ниже:searchQuery.addRequiredTerm(Field.ENTRY_CLASS_NAME, JournalArticle.class.getName()); searchQuery.addRequiredTerm(Field.CLASS_TYPE_ID, structureId);
- person Clemaul   schedule 04.02.2019