3

如果所有搜索关键字出现在任何搜索字段中的任何位置,我需要让基于 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 做过,而且效果很好。我究竟做错了什么?

4

2 回答 2

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") 

它基本上规定:一个或多个词必须在关键字中匹配,一个或多个词必须在名称中匹配,一个或多个词必须在作者中匹配。

于 2013-03-09T13:29:13.500 回答
1

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

请尝试使用参数 {!q.op=AND} 进行查询

我猜你使用默认查询解析器,如果我错了,请纠正我

于 2013-03-09T12:28:26.743 回答