Liferay搜索结构化的Web内容匹配附件的术语

时间:2019-01-31 16:28:16

标签: java elasticsearch liferay booleanquery

我们有一个带有“文档和媒体”字段的Web内容结构“ S”。

我们根据先前的结构«S»创建了一个名为«W»的Web内容,其中带有一个名为“ a”的单词文件附件,其内部带有“ hello”文本。

我们知道lucene / ElasticSearch会为附件的内容建立索引,例如,它是word或pdf文件。

因此,我们进行了Lucene搜索(使用booleanQuery,对journalArticle进行拟合)以检索S网站内容以匹配“ hello”搜索字词。

但是我们看到,lucene在journalArticle上进行过滤,并返回带有这些数据的json类对象:

“ ddm__关键字__87940__attachments_zh_CN”:[ {\“ groupId \”:\“ 115863 \”,\“ title \”:\“ a.word \”,\“ type \”:\“ document \”,\“ uuid \”:\“ dffd1d3d-8b78 -a64c-4d0c-8d004d24cb75 \“}]

它仅具有对DLFileEntry对象的引用。

是否有一种方法,只需一个请求,即可检索与单词附件相匹配的日记文章?

我们看到Liferay提出了“索引器后处理器”,它可以帮助我们将DLFileEntry数据存储在Webcontent的新字段中,但DLFileEntry索引是异步的。

我们能做什么?

2 个答案:

答案 0 :(得分:0)

如果您不坚持在ES级别上执行单个查询,则可以使用Hit Post处理程序来解决。

https://dev.liferay.com/de/develop/tutorials/-/knowledge_base/7-0/introduction-to-liferay-search#hitsprocessor

我将查询文件中的单词,然后如果出现匹配,我将使用后处理器来增强结果,以添加/替换潜在的Web内容条目。

答案 1 :(得分:0)

我们找到了解决方案:

  1. 我们为JournalArticle类创建一个挂钩索引器后处理器。
  2. 在索引器后处理器中,我们检索dlFileEntry和索引 通过 document.addFile()
  3. 在我们的portlet中,我们现在可以使用 booleanQuery( addterm )并带有 IndexSearcherHelperUtil.search

唯一的缺点是文件内容被索引了两次(本来是dlFileEntry,现在是journalArticle)