【问题标题】:Django Haystack Solr autocomplete with numbers not workingDjango Haystack Solr 自动完成,数字不起作用
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 有道理。我试试看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多