【发布时间】:2010-07-13 08:19:24
【问题描述】:
我在 Windows 上使用 Solr 1.4.1 (lucene 2.9.3) 并试图了解 ShingleFilter。我编写了以下代码,发现如果我提供的单词多于字段中索引的实际短语,则对该字段的搜索将失败,即 debugQuery=true 时该字段没有提供分数。
这是我创建的用于重现的示例,其中包含字段名称和索引的文档:
编号:1
title_1:妮娜·西蒙尼
title_2: 我对你施了咒语
发出以下查询 (dismax):
- “我放了 Nina Simone”
- “尼娜西蒙尼”
尝试分析上述差异,当我使用 Solr 的 Field Analysis 和“shingle”字段(如下所示)并尝试“Nina Simone I put”时,它成功了。所以只有在查询期间才提供分数。我还检查了“parsedquery”,它显示 disjunctionMaxQuery 向 title_1 字段发出字符串“Nina_Simone Simone_I I_put”。
title_1 和 title_2 字段属于“shingle”类型,定义为:
<fieldType name="shingle" class="solr.TextField" positionIncrementGap="100" indexed="true" stored="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
</analyzer>
</fieldType>
请注意,我还有一个包罗万象的字段,即文本。我将 qf 设置为:'id^2 catchall^0.8' 和 pf 设置为:'title_1^1.5 title_2^1.2'
我有什么遗漏或做错了吗?
【问题讨论】: