java-Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1465字,纯文字阅读大概需要3分钟。
内容图文
![java-Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果](/upload/InfoBanner/zyjiaocheng/677/488b93f713d34cbd839c14d7a037c9b8.jpg)
如果所有搜索关键字都出现在任何搜索字段中的任何位置,则需要使基于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")
基本规定:一个或多个术语必须与关键字匹配,一个或多个术语必须与名称匹配,一个或多个术语必须与作者匹配.
内容总结
以上是互联网集市为您收集整理的java-Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果全部内容,希望文章能够帮你解决java-Solr:当使用多个单词查询字段时,默认的OR运算符返回不相关的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。