【问题标题】:Can we implement Solr auto suggest without storing the field but only indexing我们可以实现 Solr 自动建议而不存储字段而只索引
【发布时间】:2012-02-16 07:17:53
【问题描述】:

我想使用 Solr 实现类似 Google 的自动建议/完成。我有 2 个与此相关的问题:

  1. 我们是否可能只索引但不存储假设运行自动完成或假设运行术语组件的字段!

  2. 我们可以使用多个字段来获取数据以填充自动建议吗?如果可以,那么这些字段可以仅用作索引而不是存储!

如果有人应用了这个并尝试了这样的实现并且可以帮助我,我会很高兴。

谢谢 赛义夫

【问题讨论】:

    标签: autocomplete solr autosuggest


    【解决方案1】:

    在 Solr 4.0 中有一个名为 Suggester 的新组件。它使用拼写检查组件根据您现有的索引构建建议。

    Suggester - Solr Wiki

    我仍在调整我的 Suggester 组件的字段类型,但这是我目前所拥有的,似乎运行良好。

        <fieldtype name="textSuggest" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.PatternReplaceFilterFactory"
                   pattern="(^[^A-Za-z0-9]*|[^A-Za-z0-9]*$)" replacement=""  replace="all" />
                <filter class="solr.LengthFilterFactory" min="2" max="60" />
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
                <filter class="solr.ShingleFilterFactory" maxShingleSize="3" outputUnigrams="true" outputUnigramIfNoNgram="true" />
                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
            </analyzer>
            <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false" />
                <filter class="solr.ShingleFilterFactory" maxShingleSize="99" outputUnigrams="false" outputUnigramIfNoNgram="true" />
            </analyzer>
        </fieldtype>
    

    【讨论】:

    • 好答案,我想指出 Solr 从 3.1 版本开始提供 Suggester,而不仅仅是 4.0。
    【解决方案2】:

    您正在寻找Solr TermsComponent,可以查询它以返回索引字段中存在的术语及其频率。具体来说,您需要 terms.prefix 参数,它将返回所有以您指定的前缀开头的术语。

    【讨论】:

    【解决方案3】:

    在用于自动完成的 SOLR 中,您必须将要搜索的 ngram 字段定义为已存储,以便返回值。

    另外,我认为 SOLR 中无法从多个字段中获取数据并从中提取单个 ngram。更简单的方法是创建一个字段并将您要使用的所有其他字段中的数据复制到该字段中,然后对其应用 ngram 标记。

    【讨论】:

      【解决方案4】:

      solr 允许将 copyfield 用作自动完成的索引。这是我在 solr 自动建议/自动完成工作中的示例,&lt;copyField source="name" dest="text"/&gt;。显然,solr 只会索引您将在自动完成中使用的字段。

      另一方面,除非存储字段,否则您无法检索字段,这里我的意思是原始字段而不是复制字段。我建议复制可搜索字段 ex:name,然后根据它自己的查询检索所有其他字段。您需要创建自定义的搜索处理程序和请求处理程序。

      稍后我将使用完整的解决方案对此进行编辑。

      您可以使用本文了解有关该主题的更多信息,然后扩展您的解决方案。 http://solr.pl/en/2010/10/18/solr-and-autocomplete-part-1/

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        • 2015-11-07
        • 2011-12-04
        • 2011-12-20
        相关资源
        最近更新 更多