Django Haystack Solr自动完成,数字不起作用

时间:2014-05-05 14:58:16

标签: django solr django-haystack

我几乎使用带有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')
  • autocomplete_string =“10”有效。
  • autocomplete_string =“th”有效。
  • autocomplete_string =“8th”不起作用。

这是我的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,但如果这是唯一的方法..

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%确定这一点)