Sitecore&使用NGram进行Solr搜索自动完成

时间:2015-08-14 11:07:59

标签: solr sitecore sitecore8

我找到了Sitecore NGram。如何使用NGram为sitecore 7设置自动完成。 我想重复一遍,但我对某些部分感到困惑:

永远不会调用的IComputedIndexField实现。我在 Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config 中设置了它,如下所示:

<fieldMap type="Sitecore.ContentSearch.SolrProvider.SolrFieldMap,
     Sitecore.ContentSearch.SolrProvider">
  <typeMatches>    
    <typeMatch typeName="autoComplete" type="System.String" fieldNameFormat="{0}_ac" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration,
     Sitecore.ContentSearch.SolrProvider" />
  </typeMatches>  
  <fieldNames hint="raw:AddFieldByFieldName"> 
    <field fieldName="titlesearch" returnType="autoComplete">MyLib.AutoCompleteTitle, MyLib</field>
  </fieldNames>    
</fieldMap>

只有一个与示例不同的是读取属性值:

 return item.Fields["Title"].Value; 

2为schema.xml添加了配置 - fieldType name =“auto_complete”代码:

<fieldType name="auto_complete" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="30" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory" />
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

3重新启动Solr并重建sitecore索引

4我很困惑我应该用于搜索的属性名称(看起来像IComputedIndexField的设置)

using (var context = ContentSearchManager.GetIndex(_searchIndexName).CreateSearchContext())
{
    var dataQuery = context.GetQueryable<SearchResultItem>().Where(i =>i["titlesearch_ac"] == searchString).Take(20);
    return dataQuery;                
}

没有任何错误,但我无法获得自动完成的结果....

1 个答案:

答案 0 :(得分:1)

仔细检查您是否在正确的位置声明了计算字段 - 应将其添加到顶部有raw:AddcomputedIndexField的部分。

 <fields hint="raw:AddComputedIndexField">
      <field fieldName="_content"  returnType="string">Sitecore.ContentSearch.ComputedFields.MediaItemContentExtractor,Sitecore.ContentSearch</field>

属性名称("titlesearch_ac")应该是索引中字段的名称。

只是旁注 - 您可以使用Solr实现自动完成。更多信息:

http://www.norconex.com/serving-autocomplete-suggestions-fast/