我正在使用Sitecore 7.2。我创建了一个自定义的Lucene索引。
虽然我能够获得Single-line Text
,Rich Text
和&类型字段的值。 DateTime
,我没有获得Droplist
和TreeList
等类型字段的值。
我尝试将这些字段的indexType更改为" UNTOKENISED"但仍然继续得到这个问题。我还使用Luke检查了我的索引,发现只有Title,Summary和Body字段是索引的一部分。
以下是我的索引配置部分,我已经定义了我的字段。 products
和type
分别是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>
我用来从索引中获取值的类如下:
public class DownloadResult : SearchResultItem
{
[IndexField("title")]
public string Title { get; set; }
[IndexField("summary")]
public string Summary { get; set; }
[IndexField("type")]
public string Type { get; set; }
[IndexField("body")]
public string Body { get; set; }
[IndexField("datemodified")]
public DateTime DateModified { get; set; }
[indexfield("products")]
public string products { get; set; }
}
答案 0 :(得分:0)
请检查搜索的默认配置文件,了解fieldtypes“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>
答案 1 :(得分:0)
在文件 Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config
你需要有下一个fieldReaders来索引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" />
请检查您是否具有这些配置,以及是否将此配置文件引用到自定义索引文件中。
答案 2 :(得分:0)
尝试声明这样的字段,这对我来说总是有用的:
[IndexField("products")]
public IEnumerable<ID> Products { get; set; }
[IndexField("type")]
public IEnumerable<ID> Type { 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" />
答案 3 :(得分:0)
您应该使用计算索引字段来索引此类字段(Treelist和Droplist)。 方法参考:How to Add Computed Index
答案 4 :(得分:0)
在尝试了所有不同的建议并点击空白后,我在配置中将indexAllFields
的值更改为true。这解决了它。
答案 5 :(得分:0)
(无法评论Sairaj的回答)
虽然indexAllFields
是解决方案,但它并不理想。我假设的真正问题(因为它发生在我们身上)是你试图索引一个从标准值中提取它的值的字段。在内容编辑器中查看项目时,它看起来有一个值,但是每个Lucene(不要问我为什么)它没有值。
显然Lucene不会从标准值中读取字段值,除非您将其告诉indexAllFields
。虽然自定义字段也可用于解决此问题,但我觉得这是A)Sitecore中的错误或B)没有人能够追踪的配置选项。
(编辑)
我们在8.1
注意到了这一点