apache - 如何在solr中而不是将结果包含为子字符串的结果中加重精确的查询文本?

标签 apache elasticsearch solr lucene query-analyzer

我正在使用名称搜索,由于某种原因,当我查询包含“samara”,“samir”或“samuel”之类的子字符串的“sam”文档时,它们的权重似乎相等。

这仅仅是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>

任何帮助将非常感激。

最佳答案

在Solr中有可能:

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

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

关于apache - 如何在solr中而不是将结果包含为子字符串的结果中加重精确的查询文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225150/

相关文章:

java - 使用 Lucene 索引单个 Xml 文件

PHP 用户级 session 持久化

java - 在哪里可以找到 org.apache.common 库

java - 添加不带 .jar 文件的 Apache xml-rpc 库

elasticsearch - 当所有嵌套文档均匹配术语条件时,过滤elasticsearch父文档

elasticsearch - 使用Elasticsearch动态计算值(value)

apache - 为什么 apache 接受这个无效的范围请求?

python - 如何使用Python在ES中自动生成id

java - lucene/Solr 性能和硬件要求

java - 尝试使用 HTTPS 连接到 Solr 时出现 IOException