在 Solr (3.3) 中,是否可以通过 a 逐字母搜索字段EdgeNGramFilterFactory
并且对短语查询敏感?
例如,我正在寻找一个字段,如果包含“对比度信息”,如果用户键入:
- 合同
- 信息学
- 控制
- 信息
- “对比信息”
- “合同信息”
目前,我做了这样的事情:
<fieldtype name="terms" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldtype>
...但它在短语查询上失败了。
当我在 solr admin 中查看模式分析器时,我发现“对比度信息”生成了以下标记:
[...] contr contra contrat in inf info infor inform [...]
所以查询使用“contrat in”(连续标记),但不能使用“contrat inf”(因为这两个标记是分开的)。
我很确定任何类型的词干都可以与短语查询一起使用,但是我找不到要在EdgeNGramFilterFactory
.