1

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

我们基于之前的结构“S”创建了一个名为“W”的网络内容,其中包含一个名为“a”的单词文件附件,其中包含“hello”文本。

我们知道 lucene/ElasticSearch 正在索引附件的内容,例如,如果它是一个单词或 pdf 文件。

所以我们做一个 lucene 搜索(使用 booleanQuery,fitering on journalArticle)来检索 S webcontent 以匹配“hello”搜索词。

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

"ddm__keyword__87940__attachements_en_US":[ {\"groupId\":\"115863\",\"title\":\"a.word\",\"type\":\"document\",\"uuid\": \"dffd1d3d-8b78-a64c-4d0c-8d004d24cb75\"}]

它只有一个对 DLFileEntry 对象的引用。

有没有一种方法,只需一个请求,即可检索与单词附件匹配的期刊文章?

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

我们能做什么 ?

4

2 回答 2

0

如果您不坚持在 ES 级别上进行单个查询,我将使用 Hit 后处理器来解决它。

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

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

于 2019-02-09T17:55:57.200 回答
0

我们找到了解决方案:

  1. 我们为 JournalArticle 类创建了一个挂钩索引器后处理器。
  2. 在索引器后处理器中,我们检索 dlFileEntry 并通过document.addFile()对其进行索引。
  3. 在我们的 portlet 中,我们现在可以使用 booleanQuery ( addterm ) 和IndexSearcherHelperUtil.search请求文件内容

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

于 2019-02-28T17:31:47.787 回答