我正在为电影片头编制索引。目前我有两个领域。
一个是预先配置的textgen,一个是字符串,我将其更改为不区分大小写。
我使用copyfield指令在两个字段中索引相同的数据。
我正在使用dismax请求处理程序。
我这样做是为了能够在“戒指之王”的标题中找到“领主戒指”,但也可以提升完全匹配。因此,例如“领主或戒指”得分高于“领主的戒指”,但两者都被发现。
现在我玩了字符串字段,这似乎是完全匹配所必需的。
但我没有得到任何结果。如果我搜索确切的字符串,我只会得到结果。甚至空间都没有工作......
答案 0 :(得分:2)
“字符串”字段未标记化(因此只有完全匹配才有效);您可以尝试将其数据类型切换为“文本”,或者将WhitespaceTokenizer
添加到您的链中。
此外,您不需要手动提升完全匹配,评分算法将为您完成。
答案 1 :(得分:2)
看看示例solr / conf / schema.xml,有很多不同类型的字段,有很好的文档。
对于您的搜索类型,您可能需要一个带有位置的简单标记化的低位字段,例如:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这个排名应该非常好。
对于标准文本搜索,使用“停用词”和“词干”来提高排名(如下面的字段)但是对于搜索标题,我可能不会这样做:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_spanish.txt"
enablePositionIncrements="true"
/>
<filter class="solr.SnowballPorterFilterFactory" language="English">
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.SnowballPorterFilterFactory" language="English"/\
>
</analyzer>
</fieldType>