Java Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果
如果所有搜索关键字都出现在任何搜索字段中的任何位置,我需要生成基于Solr的搜索返回结果 当前情况: 搜索查询示例:Java Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果,java,search,solr,lucene,Java,Search,Solr,Lucene,如果所有搜索关键字都出现在任何搜索字段中的任何位置,我需要生成基于Solr的搜索返回结果 当前情况: 搜索查询示例:关键字:“柏林房屋约翰”姓名:“柏林房屋约翰”姓名作者:“柏林房屋约翰”姓名“ 让我们假设只有一个结果,其中keywords=“house”、name=“berlin”和author=“john”,这三个词没有其他可能的排列方式 如果defaultOperator为OR,Solr将返回每个字段中每个关键字的简单OR,这是一个庞大的列表,其中当然,最佳匹配结果位于第一个位置,但下一个
关键字:“柏林房屋约翰”姓名:“柏林房屋约翰”姓名作者:“柏林房屋约翰”姓名“
让我们假设只有一个结果,其中keywords=“house”、name=“berlin”和author=“john”,这三个词没有其他可能的排列方式
如果defaultOperator为OR,Solr将返回每个字段中每个关键字的简单OR,这是一个庞大的列表,其中当然,最佳匹配结果位于第一个位置,但下一个结果的相关性很小(可能只有一个字段匹配),它们只会让用户感到困惑
另一方面,如果我将默认运算符切换为AND,则绝对不会得到任何结果。我想它是在试图为这三个词找到一个完美的匹配,在这三个领域,当然,这是不存在的
搜索词来自搜索输入,用户在其中编写自由文本,没有特定的语言约定(hashtag或其他)
我知道我所问的是可能的,因为我以前用纯Lucene做过,而且很有效。我做错了什么 从Solr 4开始,不推荐使用defaultOperator。请不要用它。 同样对于我来说,defaultOperator的工作原理与查询中指定的运算符相同。我说不出为什么,这只是我的经验 请尝试使用参数{!q.op=AND}进行查询
我猜您使用默认的查询解析器,如果我错了,请修复我如果您只需要确保所有单词都出现在所有字段中,我建议在索引时将所有相关字段复制到一个字段中,并查询此字段。为此,您需要引入一个新字段,然后对所有要复制的源字段使用
copyField
。要复制所有字段,请使用:
<copyField source="*" dest="text"/>
基本上是这样的:一个或多个术语必须在关键字中匹配,一个或多个术语必须在名称中匹配,一个或多个术语必须在作者中匹配 你能修复你的查询吗?引号看起来不好布尔代数在查询时就可以了。今天早上我得出了同样的结论。我只需要确保在查询词之间包含OR
(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")