我正在使用Lucene搜索Sitecore 7.2并使用谓词构建器来搜索数据。我在索引中包含了一个计算字段,它是一个字符串。当我使用.Contains(mystring)
在该字段上进行搜索时,如果有'并且'出现在mystring
。如果没有'和'在它可行的mystring
中。
你能告诉我什么吗?
答案 0 :(得分:1)
默认情况下,Lucene在处理字段和查询时会删除所谓的“停用词”,例如and
和the
等。
如果您不想要此行为,可以在配置的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。