solr 一些前缀例如:q、fq、df 的用法
- Solr
- 时间:2022-02-08 17:45
- 6042人已阅读
简介
在solr查询的时候,我们会看到q、fq、df等等,这些字段都是什么意思呢?本文将用代码介绍
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
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("=============================="); } } }