0

我正在使用名称搜索,并且由于某种原因,当我查询包含查询的“sam”文档作为子字符串(如“samara”“samir”“samuel”)时,返回的权重看似相等。

这只是 Solr 的一个内置功能,可以将包含您的搜索词的单词解析为子字符串吗?有没有办法在转移到替代方案之前对确切的查询本身施加更大的权重?

我已经有两个单独fieldTypes的文本比它的同义词更重原始文本,但我无法找到解决这个子字符串问题的方法,因为它似乎是 Solr 固有的。

这是我的 fieldType 定义:

<fieldType class="solr.TextField" name="fullTextName" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">

        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>

    </analyzer>
</fieldType>

任何帮助将非常感激。

4

1 回答 1

1

在 Solr 中是可能的:

1)您定义了 2 个字段类型:fullTextName 和 fullTextNameExact 它们之间的区别将是索引时间分析,特别是您希望确切的字段类型没有边缘 Ngram 令牌过滤器。

2)您创建 2 个字段,每种类型一个

3) 您定义一个使用 dismax 查询解析器或 edismax 查询解析器的请求处理程序。[1]

4) 使用的一个请求参数是“qf”,该参数允许您表达要参与搜索的不同字段,并以不同的提升对它们进行加权。在您的情况下,您可以使用:

<str name="qf">fullTextNameExact^3 fullTextName</str>

这将提升更强的精确匹配结果,但仍允许自动完成。

[1] https://cwiki.apache.org/confluence/display/solr/The+Extended+DisMax+Query+Parser

于 2017-07-25T15:09:24.147 回答