Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果_Java_Search_Solr_Lucene - Fatal编程技术网

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

Java Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果,java,search,solr,lucene,Java,Search,Solr,Lucene,如果所有搜索关键字都出现在任何搜索字段中的任何位置,我需要生成基于Solr的搜索返回结果 当前情况: 搜索查询示例:关键字:“柏林房屋约翰”姓名:“柏林房屋约翰”姓名作者:“柏林房屋约翰”姓名“ 让我们假设只有一个结果,其中keywords=“house”、name=“berlin”和author=“john”,这三个词没有其他可能的排列方式 如果defaultOperator为OR,Solr将返回每个字段中每个关键字的简单OR,这是一个庞大的列表,其中当然,最佳匹配结果位于第一个位置,但下一个

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

当前情况:

搜索查询示例:
关键字:“柏林房屋约翰”姓名:“柏林房屋约翰”姓名作者:“柏林房屋约翰”姓名“

让我们假设只有一个结果,其中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")