Solr的查询语法

查询索引

solr的查询语法

1. q - 查询关键字,必须的,如果查询所有使用*😗。

请求的q是字符串

2.  fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如::

请求fq是一个数组(多个值)

过滤查询价格从1到20的记录。

也可以在“q”查询条件中使用product_price:[1 TO 20],如下:

也可以使用“*”表示无限,例如:

20以上:product_price:[20 TO *]

20以下:product_price:[* TO 20]

3. sort - 排序,格式:sort= +<desc|asc>[, +<desc|asc>]… 。示例:

按价格降序

4.         start - 分页显示使用,开始记录下标,从0开始

5.         rows - 指定返回结果最多有多少条记录,配合start来实现分页。

实际开发时,知道当前页码和每页显示的个数最后求出开始下标。

6.         fl - 指定返回那些字段内容,用逗号或空格分隔多个。

显示商品图片、商品名称、商品价格

7.  df-指定一个搜索Field

也可以在SolrCore目录 中conf/solrconfig.xml文件中指定默认搜索Field,指定后就可以直接在“q”查询条件中输入关键字。

8. wt - (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。

9.  hl 是否高亮 ,设置高亮Field,设置格式前缀和后缀。

简单查询

@Test
    public void queryIndex() throws Exception {
       // 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
       // 参数:solr服务器的访问地址
       HttpSolrServer server = new HttpSolrServer(
              "http://localhost:8080/solr/");
 
       // 创建SolrQuery对象
       SolrQuery query = new SolrQuery();
       // 设置查询条件,名称“q”是固定的且必须 的
       query.set("q", "id:2");
 
       // 调用server的查询方法,查询索引库
       QueryResponse response = server.query(query);
 
       // 查询结果
       SolrDocumentList results = response.getResults();
 
       // 查询结果总数
       long cnt = results.getNumFound();
       System.out.println("查询结果总数:" + cnt);
 
       for (SolrDocument solrDocument : results) {
           System.out.println(solrDocument.get("id"));
           System.out.println(solrDocument.get("product\_name"));
           System.out.println(solrDocument.get("product\_price"));
           System.out.println(solrDocument.get("product\_catalog\_name"));
           System.out.println(solrDocument.get("product\_picture"));
 
       }
    }

复杂查询

复杂查询中包括高亮的处理

@Test
     public void queryIndex2() throws Exception {
         // 创建HttpSolrServer对象,通过它和Solr服务器建立连接。
         // 参数:solr服务器的访问地址
         HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/");
 
         // 创建SolrQuery对象
         SolrQuery query = new SolrQuery();
 
         // 设置查询条件
         query.setQuery("钻石");
         // 设置过滤条件
         query.setFilterQueries("product\_catalog\_name:幽默杂货");
         // 设置排序
         query.setSort("product\_price", ORDER.desc);
         // 设置分页信息
         query.setStart(0);
         query.setRows(10);
 
         // 设置显得的域的列表
         query.setFields("id", "product\_name", "product\_price",
                   "product\_catalog\_name", "product\_picture");
 
         // 设置默认搜索域
         query.set("df", "product\_name");
 
         // 设置高亮
         query.setHighlight(true);
         query.addHighlightField("product\_name");
         query.setHighlightSimplePre("<em>");
         query.setHighlightSimplePost("</em>");
 
         // 调用server的查询方法,查询索引库
         QueryResponse response = server.query(query);
 
         // 查询结果
         SolrDocumentList results = response.getResults();
 
         // 查询结果总数
         long cnt = results.getNumFound();
         System.out.println("查询结果总数:" + cnt);
 
         for (SolrDocument solrDocument : results) {
              System.out.println(solrDocument.get("id"));
 
              String productName = (String) solrDocument.get("product\_name");
 
              //获取高亮列表
              Map<String, Map<String, List<String>>> highlighting = response
                       .getHighlighting();
              //获得本文档的高亮信息
              List<String> list = highlighting.get(solrDocument.get("id")).get(
                       "product\_name");
              //如果有高亮,则把商品名称赋值为有高亮的那个名称
              if (list != null) {
                   productName = list.get(0);
              }
 
              System.out.println(productName);
              System.out.println(solrDocument.get("product\_price"));
              System.out.println(solrDocument.get("product\_catalog\_name"));
              System.out.println(solrDocument.get("product\_picture"));
 
         }
     }

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值