【发布时间】:2014-05-05 14:58:15
【问题描述】:
我几乎可以将 Haystack 与 Solr 一起使用,但当我尝试匹配的标签仅以一个数字开头时,它似乎不起作用。
我有这些标签:
"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" 不起作用。
这是我的 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 年级”拆分为数字和单词。它仅获得长度为 1 的“9”,因此无法执行查询。我想知道如何强制将“9th”索引为原子词,并且在通过“9t”自动完成或调整设置以使其正常工作时不会出现问题。
出于某种原因,我不想将 minGramSize 减少到 1,但如果这是唯一的方法..
【问题讨论】:
标签: django solr django-haystack