Lucene 如何使用Sitecore内容搜索和页面编辑器

Lucene 如何使用Sitecore内容搜索和页面编辑器,lucene,sitecore,Lucene,Sitecore,我重写了一个从快速查询到内容搜索的新闻应用程序(概述+详细信息)。性能提升是巨大的,但我看到了一些可能的限制,我不知道如何与页面编辑器一起处理这些限制 当我使用快速查询时,即使还没有语言版本,我也会得到一个新闻实例。在Lucene中,我找不到结果(因为我过滤语言),因此在特定语言的概述中缺少新闻细节 编辑问题1 假设我们有一个两种语言(英语和德语)的解决方案。我有一个项目,目前只存在于一个单一的英文版本。当我在德语的概览页面上,希望通过快速查询找到此项目时(查询不重要),我会将此项目取回。错误的

我重写了一个从快速查询到内容搜索的新闻应用程序(概述+详细信息)。性能提升是巨大的,但我看到了一些可能的限制,我不知道如何与页面编辑器一起处理这些限制

  • 当我使用快速查询时,即使还没有语言版本,我也会得到一个新闻实例。在Lucene中,我找不到结果(因为我过滤语言),因此在特定语言的概述中缺少新闻细节
  • 编辑问题1

    假设我们有一个两种语言(英语和德语)的解决方案。我有一个项目,目前只存在于一个单一的英文版本。当我在德语的概览页面上,希望通过快速查询找到此项目时(查询不重要),我会将此项目取回。错误的版本,但我把它拿回来了。现在,如果我在页面编辑器中,我可以转到这个项目并用德语编辑它,即使还没有版本。第一次单击save按钮将为我创建第一个版本

    当我想通过内容搜索找到项目时,我的自然查询方式是通过使用相同的过滤器(可能是通过模板、路径和一些通道或其他方式)和SearchResultItem的language属性进行过滤,因为我不希望同一项目有多个结果。但是由于目前只有一个英文版本,索引只包含一个英文结果,而且由于语言过滤器的原因,我找不到这个项目来调用它的GetItem

    从最初写这个问题开始,我看到了两种解决方法:

    a) 在页面编辑器模式下删除语言过滤器,然后以某种方式对其进行过滤(我不知道是否能够获得可以在页面编辑器中以德语编辑的项目)

    b) 创建一个特定于页面编辑器的主搜索索引,该索引包含解决方案中每个项目的所有语言的条目,即使特定语言中没有条目。我可以添加一个computed字段,以指示此结果是否为真实的项目版本,并在必要时在某个点进行过滤。也许我可以在这上面调用GetItem并启用页面编辑器功能

  • 对于lucene,当我想通过lucene通过其显示名称解析细节项时,我无法在(当前)不存在的语言版本中找到细节项(因为还没有语言版本索引)
  • 编辑问题2

    这与问题1密切相关

  • 在工作流方面,我看到了与索引版本可能存在的冲突。是否为索引中的第一个版本,然后再批准该版本?否则,在内容编辑器中获得批准之前,概述没有机会显示此项目

  • 是否有人使用过页面编辑器相关操作的内容搜索,并对如何解决此类问题提出了一些建议?

    我对Sitecore 7也有同样的问题,虽然我没有最终的解决方案,但希望您能发现以下信息对您有所帮助

    我的回答再好不过这篇帖子了:

    通过Sitecore ContentSearch,您可以选择要使用的搜索索引。在页面编辑器/预览模式下,您可能会使用sitecore\u master\u index,并在发布的网站上使用sitecore\u web\u index。由于web数据库中每个项目只有一个版本,因此不必担心它们在索引中是多个版本。但是,默认情况下,sitecore\u master\u索引将索引所有语言的项目的所有版本。如果不小心,您可能会看到项目在清单组件中多次出现

    Sitecore 7有一个字段“\u latest version”,您可以将其添加到所有查询中,但由于以下几个原因,该字段不可靠:

  • 考虑到发布限制以及您在“体验”视图中选择的日期等因素,最新版本不一定是正确的
  • 由于一个bug,我经常能够导致索引中一个项目有多个版本,其中_latestversion为1。不是在完全重建之后,而是在一两次编辑之后。我在Sitecore 7.0中看到了这一点,我不确定它是否已经修复
  • 有关如何使用“入站过滤器”以确保只有最新版本进入主索引的更多信息,请阅读,但请记住,在我看来,这并不能真正解决核心问题,因为最新版本不一定是正确的

    因此,考虑到这一点,以及您需要语言回退的事实,您可能应该而不是在Lucene级别过滤这些结果,但是自己在代码中执行必要的魔术。这需要:

    • 按项目将版本分组在一起
    • 根据当前语言、日期、安全性和工作流选择正确的版本
    • 如果找不到所述版本,则应用所需的回退逻辑
    • 不知何故,以一种性能良好的方式对其进行分页
    我还认为以下问题是相关的: -当您期望搜索API以与查询API完全相同的方式工作时,您可能会发现一些其他问题


    我很想知道你的想法,如果你能找到更好的解决方案!谢谢,Steve。

    你说的“当我使用快速查询时,即使没有语言版本,我也会得到一条新闻的实例”是什么意思?你会做语言回退吗?不,我的意思是当我用特定语言(例如德语)创建一个项目时,当当前上下文语言为英语时,我可以进行快速查询以获得该项目。当我将此项目设置为上下文项目时,在页面编辑器中我可以用英语编辑此项目,保存时,它将获得第一个英语版本。当我使用带有语言过滤器的内容搜索到英语时,我找不到该项目,因为它没有