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

时间:2016-03-01 14:35:19

标签: lucene sitecore

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

虽然我能够获得Single-line TextRich Text和&类型字段的值。 DateTime,我没有获得DroplistTreeList等类型字段的值。

我尝试将这些字段的indexType更改为" UNTOKENISED"但仍然继续得到这个问题。我还使用Luke检查了我的索引,发现只有Title,Summary和Body字段是索引的一部分。

以下是我的索引配置部分,我已经定义了我的字段。 productstype分别是TreelistDroplist字段。

<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; }        
    }

6 个答案:

答案 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

注意到了这一点