我正在尝试使用Solr搜索部分单词,但我无法使其工作。
我在schema.xml
文件中使用此功能。
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
</analyzer>
</fieldType>
搜索die h
无效,但die hard
会返回一些结果。
在添加上述配置后,我重新编制了数据库索引。
Here是搜索die hard
时的网址和输出。调试器已打开。
Here是搜索die h
时的网址和输出。调试器已打开。
我正在使用Solr 3.3。 Here是schema.xml
文件的其余部分。
答案 0 :(得分:6)
您共享的查询正在搜索“title_text”字段,但您在上面发布的架构定义了“text”字段。假设这只是一个疏忽,并且title_text字段在你的帖子中被定义,我认为一个可能的问题是NGramTokenizer配置了minGramSize =“3”,并且你期望使用单字符令牌进行匹配。 / p>
您可以尝试将minGramSize更改为1,但这将不可避免地导致一些非常低效的索引;我想知道你是否真的热衷于在电影中标题为“e”匹配电影?