【问题标题】:Sitecore: Lucene Index item id is stored without curly bracesSitecore:Lucene 索引项 id 存储时没有大括号
【发布时间】:2016-06-21 10:54:54
【问题描述】:

我有以下用于存储字段的配置。

<fieldType fieldName="Profile Id" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.Guid" nullValue="NULL" emptyString="EMPTY" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider" />

当我使用 LukeAll 检查索引时,我看到的 id 为:

我不知道为什么大括号不见了,为什么所有的字符都是小写的。我想将它存储为普通的 guid,就像在带有花括号和所有大写字符的 sitecore 中一样。

我也试过type="System.string",但还是一样。

【问题讨论】:

  • 在 Lucene 中存储不带括号的 guid 是一种常见的做法 - Sitecore 默认情况下会这样做。为什么要明确希望它们出现在索引中?
  • 稍后在代码中比较两个字符串,一个来自Sitecore Item Id,一个来自Index field
  • 为什么会阻止你?您可以使用 String.Contains 方法轻松比较两个字符串
  • 如果你在做一个字符串比较,你可以使用 Guid.ToString 方法的格式参数 (msdn.microsoft.com/en-us/library/97af8hh4(v=vs.110).aspx) 来得到相同的格式。

标签: lucene sitecore


【解决方案1】:

实际上,由于您的字段是 TOKENIZED,Sitecore 存储您的 ID 的方式是为了避免发生其他情况。 TOKENIZED 意味着,您的 ID 将在 Lucene 内部分解,如下所示:

c50e5028 8eba 4ba9 854cf (你明白了)

因此,如果您在 Lucene 中搜索 8eba,它将与您现在看到的 profile_id 字段匹配。这很少是人们所期望的。

为了避免这个问题;不要将 Sitecore ID 放入索引中。也不是向导。 (还有其他解决方法,但我在这里向您展示更简单的方法)。

使用item.ID.ToShortID() - 这会生成一个没有大括号和破折号的 Guid。当您以后想要比较(或查询)时,只需使用相同的.ToShortID() 方法进行匹配即可。

【讨论】:

【解决方案2】:

在我看来,您的原始值不包含花括号。

如果字段值包含大括号(并且 storageType="YES"),Luke 将向您显示被索引为与索引数据并列的值(根据所使用的分析器,这可能会非常不同)。

如果您确实希望索引数据包含大括号,请设置 indexType="UN_TOKENIZED" 或为字段选择类似 Lucene.Net.Analysis.WhitespaceAnalyzer 的内容。

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多