solr联合多个字段进行检索(multivalued和copyfield的使用)
在实际工作中不仅仅对索引中的单个字段进行搜索。需要进行综合查询。 比如book表中有id,name(标题),price,summary(摘要),content(内容),我们要找一本书的时候,查询关键字“平凡的世界”,需要从标题或者摘要或者内容里包含这个关键字时就算找到了。这就需要使用copyField和multiValue标签了。
在schema.xml中将需要检索的字段,使用copyField拷贝到一个新的searchText的field中,并设置这个searchText field的multivalue属性为true即可。
<fields>
<field name="id" type="string" indexed="true" stored="true" required="true" />
<field name="name" type="textMaxWord_cn" indexed="true" stored="true" />
<field name="price" type="long" indexed="true" stored="true" />
<field name="summary" type="textMaxWord_cn" indexed="true" stored="true" />
<field name="content" type="textMaxWord_cn" indexed="true" stored="true" />
<field name="searchText" type="textMaxWord_cn" indexed="true" stored="false" multiValued="true" />
<field name="createTime" type="string" indexed="true" stored="false" />
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>searchText</defaultSearchField>
<solrQueryParser defaultOperator="AND" />
<copyField source="name" dest="searchText" />
<copyField source="summary" dest="searchText" />
且可设置检索的时候,哪个field占的权重多一点。 在solrconfig.xml中可设置如下:
<requestHandler name="dismax" class="solr.SearchHandler">
<lst name="defaults">
<str name="defType">edismax</str>
<str name="echoParams">explicit</str>
<float name="tie">0.1</float>
<!--
<str name="bf">scoreParser(type)</str>
-->
<str name="bf">sum(recip(ms(NOW,last_modified),3.16e-11,1,1),div(1000,price))^100</str>
<str name="pf">
name^100 summary^50 content^20
</str>
<str name="qf">
name^10 summary^ content^2
</str>
</requestHandler>
在网上找了这两个参数的定义:
pf: 可提供对一条记录的多个字段做匹配的功能 qf: 针对查询的每个字段设置不同的boost权重打分,其设置的字段必须为在pf中配置的项。
事例解释:
http://localhost:8080/solr/select?defType=dismax&qf=name^10 summary ^1 &q=平凡的世界&pf=name^50 summary ^1&q.op=OR&bf=sum(recip(ms(NOW,createTime),3.16e-11,1,1),div(1000,price))^100 该查询表示:在name和summary 中搜索关键字“平凡的世界”,name和summary 在字段查询中的比重分别为10、1(qf=qf=name^10 summary ^1);并且这两个字段phrase的打分为 pf=name^50 summary ^1,也就是name占的比重为50,而summary占的比重小点;且该查询考虑了书本的价格和书的上架时间(bf=sum(recip(ms(NOW,last_createTime),3.16e-11,1,1),div(1000,price))^100)
bf可以自己实现自己的定义。 关于多字段检索也可看看这篇文章的介绍:http://adminjun.iteye.com/blog/2258480
在实际项目中可能会存储clob类型的字段,这就需要另外的处理,详细请参照博客:http://blog.csdn.net/u010248330/article/details/72957645
solr联合多个字段进行检索(multivalued和copyfield的使用)的更多相关文章
- MYSQ创建联合索引,字段的先后顺序,对查询的影响分析
MYSQ创建联合索引,字段的先后顺序,对查询的影响分析 前言 最左匹配原则 为什么会有最左前缀呢? 联合索引的存储结构 联合索引字段的先后顺序 b+树可以存储的数据条数 总结 参考 MYSQ创建联合索 ...
- Solr内置的字段类型
字段类型在org.apache.solr.schema包下 Class 描述 BCDIntField 二进制整形字段 BCDLongField 二进制长整形字段 BCDStrField 二进制字符型字 ...
- Solr页面查询各个字段参数解释
q:查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,类似于sql中的where 1=1. fq(filter query):过滤查询,提供一个可选的筛选器查询.返回在q查询符合结果 ...
- MyBatis 多表联合查询,字段重复的解决方法
MyBatis 多表联合查询,两张表中字段重复时,在配置文件中,sql语句联合查询时使用字段别名,resultMap中对应的column属性使用相应的别名: <resultMap type=&q ...
- Solr局部或指定字段更新之set用法
solr wiki文档也有 http://yonik.com/solr/atomic-updates/ java code public static void up ...
- oracle 大字段clob检索
select * from tab_name twhere dbms_lob.instr(t.daziduan, 'aaa', 1, 1) > 0;
- Solr5.3.1通过copyField设置多个field(字段)同时检索
如果业务需要我们对多个field同时进行检索,有没有什么好的办法呢?非常幸运的是Solr为我们提供了copyField对多个field进行索引和检索.然而配置也非常简单. 修改schame.xml,添 ...
- 1.4.2 solr字段类型--(1.4.2.1)字段类型定义和字段类型属性
1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...
- solr注意事项-solrconfig中的默认搜索域会覆盖schema中的默认搜索域,注意copyfeild中被corp的字段搜索
结论一:solrconfig.xml的默认搜索配置权限高于schema.xml中的默认搜索配置! 配置1:solrconfig.xml文件中关于select的配置: <requestHandle ...
随机推荐
- 详解基本TCP套接字函数
以下讲解基本TCP套接字函数. 1.socket 函数 指定期望的通信协议类型. #include <sys/types.h> /* See NOTES */ #include ...
- js中准确判断数据类型的方法
一 通用的typeof 方法 typeof ture 输出 Boolean typeof 123 输出 number ..... 但是 typeof 无法判断 nu ...
- FSTConfiguration 高性能序列化框架FST
转自:https://blog.csdn.net/z69183787/article/details/53005961 fst是完全兼容JDK序列化协议的系列化框架,序列化速度大概是JDK的4-10倍 ...
- jquery中not的用法[.not(selector)]
描述: 从匹配的元素集合中移除指定的元素. 如果提供的jQuery对象代表了一组DOM元素,.not()方法构建一个新的匹配元素的jQuery对象,用于存放筛选后的元素.所提供的选择器是对每个元素进行 ...
- Pma模块详解,对用户登录linux等进行限制,密码修改限制等
PAM详细介绍 2014-04-02 09:26:41 标签:PAM 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lidefu ...
- MSG命令使用详解
最近在编写FTP上传数据的批处理时,需要用到局域网内传输数据来提示错误,突然想起忘了N久没用的命令(net send), 结果在win7 下cmd运行net send /? 运行失败.经过百度大神的 ...
- 海思3518EV200 SDK中获取和保存H.264码流详解
/****************************************** step 2: Start to get streams of each channel. ********** ...
- POJ1734无向图求最小环
题目:http://poj.org/problem?id=1734 方法有点像floyd.若与k直接相连的 i 和 j 在不经过k的情况下已经连通,则有环. 注意区分直接连接和间接连接. * 路径记录 ...
- python 如何将md5转为16字节
python的hashlib库中提供的hexdigest返回长度32的字符串. md5sum是128bit,也就是16字节,如何将python生成字符串的转为16字节呢? 请看下面代码 import ...
- Sql中判断"数据库"、"表"、"临时表"、"存储过程"和列"是否存在
--判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER..sysdatabases WHERE NAME = '库名') PRINT 'exists ' else ...