不从Lucene索引获取Droplist和TreeList类型字段的值

不从Lucene索引获取Droplist和TreeList类型字段的值,lucene,sitecore,Lucene,Sitecore,我正在使用Sitecore 7.2。我创建了一个自定义Lucene索引 虽然我能够获取类型为单行文本、富文本和日期时间的字段值,但我无法获取类型为滴列表和树列表的字段值 我曾尝试将这些字段的索引类型更改为“unkenised”,但仍然会遇到这个问题。我还使用Luke检查了我的索引,发现只有Title、Summary和Body字段是索引的一部分 下面是我定义字段的索引配置部分产品和类型分别是Treelist和Droplist字段 <fieldMap type="Sitecore.Conten

我正在使用Sitecore 7.2。我创建了一个自定义Lucene索引

虽然我能够获取类型为
单行文本
富文本
日期时间
的字段值,但我无法获取类型为
滴列表
树列表
的字段值

我曾尝试将这些字段的索引类型更改为“unkenised”,但仍然会遇到这个问题。我还使用Luke检查了我的索引,发现只有Title、Summary和Body字段是索引的一部分

下面是我定义字段的索引配置部分<代码>产品和类型分别是
Treelist
Droplist
字段

<fieldMap type="Sitecore.ContentSearch.FieldMap, Sitecore.ContentSearch">
  <fieldNames hint="raw:AddFieldByFieldName">
    <field fieldName="title" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider">
      <analyzer type="Sitecore.ContentSearch.LuceneProvider.Analyzers.LowerCaseKeywordAnalyzer, Sitecore.ContentSearch.LuceneProvider" />
    </field>
    <field fieldName="summary" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider">
      <analyzer type="Sitecore.ContentSearch.LuceneProvider.Analyzers.LowerCaseKeywordAnalyzer, Sitecore.ContentSearch.LuceneProvider" />
    </field>
    <field fieldName="body" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider">
      <analyzer type="Sitecore.ContentSearch.LuceneProvider.Analyzers.LowerCaseKeywordAnalyzer, Sitecore.ContentSearch.LuceneProvider" />
    </field>
    <field fieldName="datemodified" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider">
      <analyzer type="Sitecore.ContentSearch.LuceneProvider.Analyzers.LowerCaseKeywordAnalyzer, Sitecore.ContentSearch.LuceneProvider" />
    </field>
    <field fieldName="products" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider">
      <analyzer type="Sitecore.ContentSearch.LuceneProvider.Analyzers.LowerCaseKeywordAnalyzer, Sitecore.ContentSearch.LuceneProvider" />
    </field>
    <fieldType fieldName="type" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String"
      settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider" />
  </fieldNames>
</fieldMap>

请检查搜索的默认配置文件中的字段类型“DropList”和“TreeList”。如果未添加,请添加:它将看起来像这样:

<fieldTypes hint="raw:AddFieldTypes">
…
<fieldType name="droplist" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
<fieldType name="treelist" storageType="NO" indexType="TOKENIZED" vectorType="NO" boost="1f" />
…
</fieldTypes>

…
…

文件Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config

您需要有NextFieldReader来索引droplist、treelist等。 这些是Sitecore中的默认配置:

         <fieldReader fieldTypeName="checklist|multilist|treelist|treelistex|tree list"  fieldNameFormat="{0}" fieldReaderType="Sitecore.ContentSearch.FieldReaders.MultiListFieldReader, Sitecore.ContentSearch" />
         <fieldReader fieldTypeName="icon|droplist|grouped droplist"                     fieldNameFormat="{0}" fieldReaderType="Sitecore.ContentSearch.FieldReaders.DefaultFieldReader, Sitecore.ContentSearch" />
         <fieldReader fieldTypeName="name lookup value list|name value list"             fieldNameFormat="{0}" fieldReaderType="Sitecore.ContentSearch.FieldReaders.NameValueListFieldReader, Sitecore.ContentSearch" />
         <fieldReader fieldTypeName="droplink|droptree|grouped droplink|tree"            fieldNameFormat="{0}" fieldReaderType="Sitecore.ContentSearch.FieldReaders.LookupFieldReader, Sitecore.ContentSearch" />


请检查您是否有这些配置,以及是否将此配置文件引用到自定义索引文件中。

请尝试这样声明您的字段,这对我总是有效的:

[IndexField(“产品”)]
公共IEnumerable乘积{get;set;}
[索引字段(“类型”)]
公共IEnumerable类型{get;set;}
您还可以尝试在
AddFieldByFieldTypeName
设置中调整存储类型设置

 <fieldType fieldTypeName="droptree" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String"   settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider" />

您应该使用计算索引字段对此类字段(树列表和滴列表)进行索引。
如何操作的参考:

在尝试了所有不同的建议并输入一个空格后,我在配置中将
indexAllFields
的值更改为true。这就解决了问题。

(无法对赛拉吉的回答发表评论)

虽然
indexAllFields
是一种解决方案,但并不理想。我认为真正的问题(因为它发生在我们身上)是您试图索引一个字段,其中的值是从标准值中提取的。在Content Editor中查看项目时,它看起来有值,但per Lucene(不要问我为什么)没有值

显然,Lucene不会从标准值中读取字段值,除非您告诉它
indexAllFields
。虽然一个自定义字段也可以用来解决这个问题,但我觉得这要么是a)Sitecore中的一个bug,要么是B)一个没有人能够追踪到的配置选项

(编辑)


我们在8.1上注意到了这一点

您用于搜索的类是什么样子的?当您查看Luke中的字段时,它是否有价值?@dnstommy是的。当我将类型更改为单行文本并重建索引时,返回值。@RichardSeal请参阅我的edit@RichardSeal我用Luke检查了这个索引。这些字段不包括在索引中。是的,我在Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config中有这些配置。我使用Luke检查了我的索引,发现只有标题、摘要和正文字段是索引的一部分。因此,这不是模型的问题。“产品”和“类型”字段不会添加到索引本身。好的,请通过查看顶部的术语而不是搜索屏幕来再次检查它是否在索引中。如果没有,我还建议在上面的
AddFieldByFieldTypeName
设置以及
AddFieldByFieldName
设置中将
storageType
更改为yes。如果这不起作用,那么是客户引起了问题。我的默认Lucene索引配置已经有了DropList和TreeList的字段类型
 <fieldType fieldTypeName="droptree" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String"   settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider" />