ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-31 06:04:41  阅读:281  来源: 互联网

标签:search lucene solr java


如果所有搜索关键字都出现在任何搜索字段中的任何位置,则需要使基于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") 

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

标签:search,lucene,solr,java
来源: https://codeday.me/bug/20191031/1973620.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有