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