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 ...
随机推荐
- uDig配图与GeoServer添加Style
软件介绍: uDig是一个开源的桌面GIS软件,可以进行shp与栅格数据地图文件的编辑和查看,对OpenGIS标准,关于互联网GIS.网络地图服务器和网络功能服务器有特别的加强.通常和GeoServe ...
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast
在C++中,存在类型转换,通常意味着存在缺陷(并非绝对).所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换( ...
- iOS-----使用CoreLocation定位
使用CoreLocation定位 CoreLocation框架 (CoreLocation.framework)可用于定位设备当前经纬度, 通过该框架, 应用程序可通过附近的蜂窝基站\WIFI信号 或 ...
- Spring如何解析XML文件——Spring源码之XML初解析
首先,在我的这篇博客中已经说到容器是怎么初步实现的,并且要使用XmlBeanDefinitionReader对象对Xml文件进行解析,那么Xml文件是如何进行解析的,将在这片博客中进行一些陈述. 数据 ...
- 51Nod - 1001:数组中和等于K的数对
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A: ...
- 【问题】C4D中设置了界面颜色,如何恢复默认?
由于C4D没有恢复默认设置的选项,恢复默认的时候比较麻烦,这里简单删除一下配置文件就好了. 1.打开C4D设置,点击下面的[打开配置文件夹],并关掉C4D. (即C:\Users\你的用户名\AppD ...
- js操作cookie总结 及乱码
涉及到cookie的 setPath问题: https://blog.csdn.net/damys/article/details/49737905 cookie注解:public voic getx ...
- 【Quartz】Quartz将Job保存在数据库中所需表的说明
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 ...
- ZH奶酪:Python使用ElementTree解析XML【译】
19.7. xml.etree.ElementTree — The ElementTree XML API 源代码: Lib/xml/etree/ElementTree.py Element类型是一种 ...
- 使用OASGraph 暴露rest 接口为graphql api
OASGraph 是loopback 团队开发的方便将rest api 暴露为graphql 的工具, 这个也是loopback 4 的一个新特性类似的有些团队提出了binding 以及stitch ...