我几乎可以使用使用Solr的Hay堆栈自动完成工作,但是当我试图匹配的标记只从一个数字开始时,它似乎就不能工作了。
我有这样的标签:
"8th Grade"
"9th Grade"
"10th Grade"这是我的查询和堆定义:
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')这是我的Solr架构的一部分:
<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年级”分成数字和单词。它只得到一个"9“长1,所以它不能执行查询。我想知道如何强制索引“9”作为一个原子词,而没有问题时,自动完成"9t“或调整设置,以使它工作。
出于某种原因,我不想把minGramSize降到1,但如果这是唯一的办法.
发布于 2014-05-05 15:49:17
请查看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专家,我不能百分之百肯定这一点)
https://stackoverflow.com/questions/23475602
复制相似问题