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

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

目前的情况:

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

让我们假设只有一个结果,其中keyword =“ house”,name =“ berlin”和author =“ john”,并且这三个词没有其他可能的排列.

如果defaultOperator是OR,Solr将对每个字段中的每个关键字返回一个简单的OR-ing,这是一个巨大的列表,当然,最佳匹配结果在第一个位置,但是下一个结果的相关性很小(也许仅一个字段匹配),它们只会使用户感到困惑.

另一方面,如果我将默认运算符切换为AND,则绝对不会获得任何结果.我猜想它试图在所有三个字段中找到所有三个单词的完美匹配,这当然是不存在的.

搜索词从搜索输入中传到应用程序中,用户在其中输入*文本-没有特定的语言约定(标签或其他东西).

我知道我要问的事情是可能的,因为我以前用纯Lucene做到了,而且行之有效.我究竟做错了什么?

解决方法:

如果您只需要确保所有单词都出现在所有字段中,建议您在索引时间将所有相关字段复制到一个字段中,然后查询该字段.为此,您需要引入一个新字段,然后对要复制的所有源字段使用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") 

基本规定:一个或多个术语必须与关键字匹配,一个或多个术语必须与名称匹配,一个或多个术语必须与作者匹配.

上一篇:Solr7.x学习(1)-导入数据


下一篇:java-Jersey Web服务代理