我将新闻应用程序(概述+详细信息)从Fast-Query重写为内容搜索。性能提升是巨大的,但我看到了一些可能的限制,我不知道与页面编辑器一起处理。
编辑问题1
让我们假设我们有两种语言(英语和德语)的解决方案。我有一个项目,目前只存在于一个英文版本中。当我在德语的概述页面上并希望通过快速查询找到此项目(查询无关紧要)时,我将返回此项目。在错误的版本,但我得到了回报。现在如果我在页面编辑器中,我可以转到这个项目并用德语编辑它,即使还没有版本。首次单击“保存”按钮将为我创建第一个版本。
当我想通过内容搜索找到项目时,我自然的查询方式是通过制作相同的过滤器(可能是通过模板,路径和一些通道或其他)和一个按SearchResultItem的语言属性过滤,因为我不想要同一项目的多个结果。但由于只有一个英文版本,索引只包含一个英文单词结果,而且由于语言过滤器,我找不到这个项目来调用GetItem。
自从最初写这个问题以来,我看到了两种方法来解决这个问题:
a)在页面编辑器模式中删除语言过滤器,然后以某种方式过滤它(我不知道我是否能够获得一个我可以在页面编辑器中用德语编辑的项目)< / p>
b)创建一个页面编辑器特定的主搜索索引,该索引为每个项目保存解决方案中所有语言的条目,即使在特定语言中没有任何语言也是如此。我可以添加一个计算字段来指示这个结果是否是真实项目版本,或者在必要时在某个时刻进行过滤。也许我可以在这上面调用GetItem并启用页面编辑器功能。
编辑问题2
这与问题1密切相关
是否有人使用内容搜索页面编辑器相关操作,并提供一些如何解决此类问题的建议?
答案 0 :(得分:1)
我在Sitecore 7遇到了同样的问题,虽然我没有为您提供最终解决方案,但希望您能找到以下有用的信息。
我不能比这篇文章更好地说出我的答案:http://thegrumpycoder.com/post/75524076869/sitecore-content-search-beware-of-the-context
使用Sitecore ContentSearch,您可以选择要使用的搜索索引。您可能在页面编辑器/预览模式下使用 sitecore_master_index ,在发布的网站上使用 sitecore_web_index 。由于Web数据库每个项目只有一个版本,因此您无需担心它们在索引中是多个版本。但是,sitecore_master_index默认情况下会索引所有语言中项目的所有版本。如果您不小心,可以在列表组件中看到多次显示的项目。
Sitecore 7有一个字段“_ latestversion”,您可以将其添加到所有查询中,但由于以下几个原因,它不可靠:
阅读http://www.sitecore.net/Learn/Blogs/Technical-Blogs/Sitecore-7-Development-Team/Posts/2013/04/Sitecore-7-Inbound-and-Outbound-Filter-Pipelines.aspx,了解有关如何使用“入站过滤器”的更多信息,以确保只有最新版本才能将其纳入主索引,但请记住,这并非真正在我看来解决核心问题,因为最新版本不一定是正确的。
所以考虑到这一点,以及你需要语言回退的事实,你应该不在Lucene级别过滤掉这些结果,但在代码中自己做必要的魔术。这需要:
我也觉得以下SO问题是相关的: Indexing Sitecore Item security and restricting returned search results - 当您希望Search API与查询API完全相同的方式时,其他一些可能会让您感到沮丧。
我很想知道你的想法,如果你找到了更好的解决方案!谢谢,史蒂夫。