搜索谓词生成器

时间:2014-07-03 08:49:20

标签: lucene sitecore sitecore7 predicatebuilder sitecore7.2

我正在使用Lucene搜索Sitecore 7.2并使用谓词构建器来搜索数据。我在索引中包含了一个计算字段,它是一个字符串。当我使用.Contains(mystring)在该字段上进行搜索时,如果有'并且'出现在mystring。如果没有'和'在它可行的mystring中。

你能告诉我什么吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,Lucene在处理字段和查询时会删除所谓的“停用词”,例如andthe等。

如果您不想要此行为,可以在配置的fieldMap部分添加一个条目,告诉Sitecore如何处理该字段...

<fieldNames hint="raw:AddFieldByFieldName">
   <field fieldName="YOURFIELDNAME" storageType="YES" indexType="UN_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>
   ...
</fieldNames>  

..这个例子告诉Sitecore,对于那个字段,不要标记化,也要把所有内容都放到小写字母中。您可以更改为不同的分析器以获得所需的结果。

您可以尝试将indexType设置为TOKENIZED,但仍然使用LowerCaseKeywordAnalyzer作为另一种组合。 UN_TOKENIZED意味着您的字符串将被处理为单个令牌,可能不是您想要的。

答案 1 :(得分:1)

我已经解决了这个问题,并从@Stephen Pope的回复中得到了暗示。为了使您的计算字段不被标记,您必须将它添加到raw:AddFieldByFieldName和AddComputedIndexField。

请参阅下面的链接 http://www.sitecore.net/Community/Technical-Blogs/Martina-Welander-Sitecore-Blog/Posts/2013/09/Sitecore-7-Search-Tips-Computed-Fields.aspx