我几乎使用带有Solr的Haystack进行自动完成工作,但是当我尝试匹配的标签只有一个数字时,它似乎不起作用。
我有这些标签:
"8th Grade"
"9th Grade"
"10th Grade"
这是我的查询和Haystack定义:
tags = SearchQuerySet().models(Tag).filter(SQ(name_auto=autocomplete_string))
class TagIndex(indexes.SearchIndex, indexes.Indexable):
name = indexes.CharField(model_attr='name', faceted=True)
name_auto = indexes.EdgeNgramField(model_attr='name')
这是我的Solma架构的一部分:
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
看起来它以某种方式将“9年级”分成数字和单词。它只获得长度为1的“9”,因此无法执行查询。我想知道如何强制将“9th”索引为原子词,并且在“9t”自动填充时没有问题或者调整设置以使其正常工作。
出于某种原因,我不想将minGramSize减少到1,但如果这是唯一的方法..
答案 0 :(得分:0)
请查看http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WordDelimiterFilterFactory 你可能想把splitOnNumerics放到0
splitOnNumerics="1" causes alphabet => number transitions to generate a new part [Solr 1.3]:
"j2se" => "j" "2" "se"
default is true ("1"); set to 0 to turn off
(不是SOLR专家,我并非100%确定这一点)