从搜索结果(Apache Solr 5.5)到最顶端的完全匹配

时间:2016-03-18 13:46:22

标签: solr full-text-search search-engine full-text-indexing

我有一个字段“描述”,我正在搜索此文件的文本,具有默认的相似性评分。说,我已经搜索了“你好男人”,我得到的结果就像“你好芒果”,“你好男人怎么样”,“你好男人10”,“你好男人”,“你好男人”。所有这些都是预期的结果,但我想在部分匹配的最顶部显示完全匹配(这里是“你好男人”)。为了获得打字错误的结果,我在索引和查询时使用了nGramFilterFactory,这是必需的。我唯一担心的是完全匹配不会出现在顶部。

请建议我们如何做到这一点或我需要采取何种方法。请帮忙。

1 个答案:

答案 0 :(得分:1)

您应该在schema.xml中定义另一个不对您的数据进行任何分析的字段。在您的情况下,最简单的方法可能是执行以下操作:

<field name="exact_description" type="string" indexed="true" stored="false" multiValued="true" />

<copyField source="originalColumnName" dest="exact_description" docValues="true" />

使用string类型会使Solr无法为您的数据进行标记或其他任何操作。

然后,在构建查询时,您可以在查询的其余部分之前添加以下内容:

exact_description:"hello man"^100.0

确保您在^100.0上加注(exact_description),因此完全匹配将被强制显示在搜索结果的顶部。

创建新字段时,请确保将其基于尚未对其执行任何分析的字段。例如,在我的架构中,我有一个名为exact_match的字段,该字段从以下内容复制而来:

<field name="match" type="string" indexed="false" stored="true" required="false" omitNorms="true" />

现在,我可以在搜索中使用match进行完全匹配,因为match只是一个字符串,但出于规范原因,我必须像这样创建exact_match

<field name="exact_match" type="string" indexed="true" stored="false" multiValued="true" />

<copyField source="match" dest="exact_match" docValues="true" />

相关问题