我们将Liferay用作经典CMS,这意味着我们使用网络内容文章撰写网页。 Liferay的内部搜索存在一个问题我无法找到合适的答案:
因为网页内容文章几乎只是网页的构建块,所以我们不希望搜索将它们显示为不同的项目。用户应该只获得包含搜索关键字的页面列表,包括放在此页面上的所有文章。
目前我们可以看到两种不同的方法,并且都存在一些我们无法解决的问题:
创意1
我们修改期刊索引器并尝试获取放置文章的页面的所有URL(如何?)。然后我们将它们添加到要编制索引的文档中。在搜索结果中,我们可以访问URL并收集它们。最后,我们确保每个网址只显示一次。
创意2
在某些时候,Liferay会在将整个页面发送到浏览器之前呈现整个页面。如果我们以某种方式将索引器放在那里,我们可以索引整个页面。然后,我们可以将搜索限制为特殊的“页面文档”。获取完全呈现的页面将是这里的主要问题,因为要么我们必须运行爬虫来频繁触发此索引,要么我们需要找到一种方法来从索引器或类似的东西中触发页面呈现。
我已经把这个问题带了很长一段时间了,现在仍然找不到一个足够好的想法来花时间尝试一下。如果你们中的任何人对这两个想法有所了解,或者可能采用完全不同的方法,我将非常感激。
答案 0 :(得分:1)
我会回答自己,因为到目前为止我们找到了一个合适的解决方案来解决我们的问题:
除了默认搜索portlet之外,还有Liferay附带的“Web Content Search Portlet”。它似乎已经成为Liferay的一部分了很长一段时间,但它有点难以找到,因为它几乎没有任何文档(我只找到了Liferay wiki page,这根本不是什么)。它仅在Web内容文章中搜索并显示指向页面的链接,而不仅仅是链接文章的独立视图。但是,它的配置选项比默认搜索portlet少得多。几乎所有它允许改变的是文章是否实际上必须放在至少一个页面上以显示在结果中。
因此不需要任何类型的自定义索引器或任何其他“hack”......我们需要做的就是使用正确的portlet。我们只需要编写一个改变结果页面外观的钩子。
答案 1 :(得分:0)
你提出的问题很有意思,但你的想法是错误的。
特别是2,它特别错误,因为在呈现页面的同时无法进行索引编制工作。只考虑性能。
在Liferay中,页面和资源没有直接链接:页面有portlet,portlet显示资产(Web内容等)。
Liferay索引是指并扫描资产内容,而不是指资产的显示结果。考虑权限:同一页面可以显示不同的内容取决于看起来的用户。
再见