solr 一些前缀例如:q、fq、df 的用法
2023-02-18 16:31:12 时间
具体的用法在代码中有注释,这边就不在累述了。
public class SolrjTest {
//添加,修改
@Test
public void test1() throws IOException, SolrServerException {
//和solr服务器创建连接,参数为solr服务器地址
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr");
//创建一个文档对象
SolrInputDocument input = new SolrInputDocument();
//向文档对象添加Field域
//第一个参数:域的名称,域的名称必须是在schema.xml中定义的
//第二个参数:域的值
input.addField("id",10001);
input.addField("item_title","测试新增内容111");
input.addField("item_sell_point","买一送一");
input.addField("item_price",100000);
input.addField("item_image","");
input.addField("item_category_name","新增");
input.addField("item_desc","新增测试");
//SolrInputDocument 添加到索引库中
//solrj 没有提供update方法,如果想要更新数据同样用add,add 方法其实就是先删除,后insert
//只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加。
solrServer.add(input);
//提交修改
solrServer.commit();
}
//删除
@Test
public void test2() throws IOException, SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr");
//根据 id 删除文档
solrServer.deleteById("10001");
solrServer.commit();
}
//删除
@Test
public void test3() throws IOException, SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
//根据查询删除索引,删除所有
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
//查询
@Test
public void test4() throws IOException, SolrServerException {
//指定连接collection1,相当于mysql的库
//一个collection就是一个solrCore即solr的实例
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
SolrQuery solrParams = new SolrQuery();
// q - 查询字符串,必须的,如果查询所有使用*:*。
// solrParams.set("q","item_title:测试新增内容");
//查看源码得知,相当于 solrParams.set("q","测试新增内容");
//CommonParams中可以查看对应的前缀参数
solrParams.setQuery("测试新增内容");
// df-指定一个搜索Field
solrParams.set("df","item_title");
//fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的
//item_price 在 1-1000000 之间,用 * 表示无限
//item_price:[100 TO *] 表示,item_price 大于 100
//也可写成 solrParams.setFilterQueries("item_price:[1 TO 1000000]");
solrParams.set("fq","item_price:[1 TO 1000000]");
//sort - 排序
//也可写成 solrParams.setSort("item_price", SolrQuery.ORDER.asc);
solrParams.set("sort"," item_price desc");
//start - 分页显示使用,开始记录下标,从0开始
//solrParams.setStart(0);
solrParams.set("start",0);
//rows - 指定返回结果最多有多少条记录,配合start来实现分页。
//solrParams.setRows(2);
solrParams.set("rows",2);
//fl - 指定返回那些字段内容,用逗号或空格分隔多个
// 执行查询,只会返回 id,item_title,item_price
//相当于 solrParams.setFields("id,item_title,item_price");
solrParams.set("fl","id,item_title,item_price");
//设置高亮
solrParams.setHighlight(true);
//设置高亮的字段
solrParams.addHighlightField("item_title");
//设置高亮前缀
solrParams.setHighlightSimplePre("<em>");
//设置高亮后缀
solrParams.setHighlightSimplePost("</em>");
QueryResponse response = solrServer.query(solrParams);
SolrDocumentList results = response.getResults();
//取高亮
Map<String, Map<String, List<String>>> highlightingMap = response.getHighlighting();
//跟是否分页的设置无关,返回的是总的记录数
System.out.println("总的查询数量:"+results.getNumFound());
for(SolrDocument solrDocument:results){
System.out.println("id:"+solrDocument.get("id"));
System.out.println("item_sell_point:"+solrDocument.get("item_sell_point"));
System.out.println("item_price:"+solrDocument.get("item_price"));
System.out.println("item_category_name:"+solrDocument.get("item_category_name"));
//取高亮
Map<String, List<String>> map = highlightingMap.get(solrDocument.get("id"));
List<String> list = map.get("item_title");
if(list!=null && list.size()>0){
System.out.println("item_title:"+list.get(0));
}else{
System.out.println("item_title:"+solrDocument.get("item_title"));
}
System.out.println("==============================");
}
}
}
相关文章
- Improved GaAs HBT Device Linearity with Flattened Ft Curve
- 让数据分析效率再提升 50%,帆软 FineBI V6.0 发布前剧透
- Simulation of SAW & BAW Resonators for RF Filters
- 颅内EEG记录揭示人类DMN网络的电生理基础
- 什么是降低能力 (RedCap) NR,它将实现什么目标?
- 《三体》世界在射频前端产业的投影:技术大爆炸之后是一地鸡毛,还是光速飞船?(待续)
- 《三体》在射频前端产业的投影:2022年的关键字——“脱水”
- 虹科分享 | 硬件加密U盘 | 管理密码安全的四大工具
- 不理解双极性晶体管(BJT),怎么做手机射频PA?
- 生存VS算力
- allure测试报告的友好展示方式
- 测试开发学习路线,学完去大厂
- 非对称密钥沉思系列(3):公钥、签名与证书
- 拥有云服务器后, 我是这样做的
- 腾讯会议REST API X-TC-Registered参数策略更新通知
- “知行合一”,我终于悟了
- 【应急能力提升5】应急响应报告点评
- 软件测试需要具备逻辑思维能力吗?
- 【应急能力提升6】应急响应专题总结会
- 【应急能力提升7】整体总结与提升