2

我们将 Liferay 用作经典的 CMS,这意味着我们使用 Web 内容文章来编写页面。Liferay 的内部搜索存在问题,我还没有找到正确的答案:

因为网络内容文章几乎只是页面的构建块,我们不希望搜索将它们显示为不同的项目。用户应该只获得包含其搜索关键字的页面列表,包括放置在此页面上的所有文章。

目前,我们可以看到两种不同的方法,它们都有一些我们还无法解决的问题:

理念一

我们修改期刊索引器并尝试获取文章所在页面的所有 URL(如何?)。然后我们将它们添加到要索引的文档中。在搜索结果中,我们可以访问 URL 并收集它们。最后,我们确保每个 URL 只显示一次。

想法 2

在某些时候,Liferay 会在将整个页面发送到浏览器之前渲染整个页面。如果我们能以某种方式在那里放置一个索引器,我们就可以索引整个页面。然后我们可以将搜索限制为特殊的“页面文档”。获取完全呈现的页面将是这里的主要问题,因为要么我们必须运行爬虫来频繁触发此索引,要么我们需要找到一种方法来从索引器或类似的东西中触发页面呈现。

我已经解决这个问题很长一段时间了,但仍然找不到一个足够好的想法来花时间尝试它。如果你们中的任何人对这两个想法或完全不同的方法有一些意见,我将非常感激。

4

2 回答 2

1

我只会回答自己,因为现在我们找到了一个合适的解决方案来解决我们的问题:

除了默认的搜索portlet,Liferay 还附带了一个“Web Content Search Portlet”。它似乎已经成为 Liferay 的一部分已经有一段时间了,但它有点难以找到,因为几乎没有任何文档(我只找到了Liferay wiki 页面,它根本什么都不是)。它仅在 Web 内容文章中搜索并显示指向页面的链接,而不仅仅是文章的孤立视图的链接。但是,它的配置选项比默认搜索 portlet 少得多。它几乎可以改变的只是文章是否实际上必须放置在至少一页上才能显示在结果中。

所以不需要任何类型的自定义索引器或任何其他“hack”……我们需要做的就是使用正确的 portlet。我们只需要编写一个改变结果页面外观的钩子。

于 2013-11-08T14:36:50.737 回答
0

你问的很有趣,但你的想法走错了方向。

特别是想法 2,这是特别错误的,因为您不能在呈现页面的同时进行索引工作。只考虑性能。

在 Liferay 中,页面和资产没有直接链接:页面有 portlet 和 portlet 显示资产(Web 内容等)。

Liferay 索引是指和扫描资产内容,而不是指资产的显示结果。想想权限:同一个页面可以显示不同的内容取决于查看的用户。

再见

于 2013-10-28T14:06:40.957 回答