Solr:当使用多个单词查询字段时,默认OR运算符返回不相关的结果

时间:2013-03-09 06:32:23

标签: java search solr lucene

如果所有搜索关键字出现在任何搜索字段的任何位置,我需要将基于Solr的搜索返回结果。

目前情况:

示例搜索查询:keywords: "berlin house john" name: "berlin house john" name" author: "berlin house john" name"

假设只有一个结果,其中keywords =" house",name =" berlin"和author =" john"这三个词没有其他可能的排列。

如果defaultOperator是OR,则Solr返回每个字段中每个关键字的简单OR-ing,这是一个巨大的列表,当然,最佳匹配结果位于第一个位置,但下一个结果很少相关性(可能只有一个字段匹配),它们只会让用户感到困惑。

另一方面,如果我将默认运算符切换到AND,我绝对没有结果。我想它正试图在所有三个字段中找到所有三个单词的完美匹配,当然,这三个字段都不存在。

搜索词从搜索输入到应用程序,用户在其中编写自由文本 - 没有特定的语言约定(主题标签或其他内容)。

我知道我所问的是可能的,因为我之前用纯Lucene做过,而且它有效。我究竟做错了什么?

2 个答案:

答案 0 :(得分:3)

如果您只是需要确定,所有单词都出现在所有字段中,我建议您在索引时将所有相关字段复制到一个字段中,然后查询此字段。为此,您需要引入一个新字段,然后对要复制的所有源字段使用copyField。要复制所有字段,请使用:

<copyField source="*" dest="text"/>

有关详细信息,请参阅http://wiki.apache.org/solr/SchemaXml#Copy_Fields

类似的方法是在查询时使用布尔代数。这与上述解决方案略有不同。

您的查询应该是

(keywords:"berlin" OR keywords:"house" OR keywords:"john") AND
(name:"berlin" OR name:"house" OR name:"john") AND
(author:"berlin" OR author:"house" OR author:"john") 

基本上指出:关键字中必须匹配一个或多个字词, name 中必须匹配一个或多个字词,且 author中必须匹配一个或多个字词

答案 1 :(得分:1)

从Solr 4开始,不推荐使用defaultOperator。请不要使用它。 另外,对于我来说,defaultOperator与查询中的指定运算符一样。我不能说它为什么,只是我的经验。

请尝试使用param {!q.op = AND}

查询

我猜您使用默认查询解析器,如果我错了就修复我