Solr复杂条件查询

solr复杂查询(排序、过滤、高亮)

简单案例:

    package cn.kingdee;

import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.junit.Test;

public class TestMyMannager {
    @Test
    public void queryIndex() throws Exception {
        //创建连接
        SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
        //创建一个query对象
        SolrQuery solrQuery = new SolrQuery();
        //设置默认的查询范围
        solrQuery.set("df", "product_name");
        //设置查询条件
        solrQuery.setQuery("台灯");
        //设置过滤条件
        solrQuery.setFilterQueries("product_catalog_name:幽默杂货");
        //设置排序条件
        solrQuery.setSort("product_price",ORDER.desc);
        //分页处理
            //开始索引为0
        solrQuery.setStart(0);
            //每页显示多少行
        solrQuery.setRows(8);
        //设置高亮(开启)
        solrQuery.setHighlight(true);
        //设置高亮域
        solrQuery.addHighlightField("product_name");
        //设置高亮前缀
        solrQuery.setHighlightSimplePre("<em>");
        //设置高亮后缀
        solrQuery.setHighlightSimplePost("</em>");
        //执行语句
        QueryResponse query = solrServer.query(solrQuery);
        //取到查询结果集
        SolrDocumentList results = query.getResults();
        //共查询到商品数量
        long numFound = results.getNumFound();
        //遍历结果
         String productname="";
        for (SolrDocument doc : results) {
            Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
            List<String> list = highlighting.get(doc.get("id")).get("product_name");
            if (list!=null&&list.size()>0) {
               productname = list.get(0);
            }else{
                productname=(String) doc.get("product_name");
            }
            System.out.println(doc.get("id"));

            System.out.println(doc.get("product_name"));
        }

    }

}

原文地址:https://www.cnblogs.com/sjzxs/p/9536428.html

时间: 2024-10-30 01:12:52

Solr复杂条件查询的相关文章

solr多条件查询(三)

1.昨天记了一下三条件的“并且” “并且”(  &&   &&  )的情况,今天再来记一下 “并且”  “或者” 的情况. 这里的或者情况,一定要搞清楚无论有多少情况,只要“或者”出现,他的级别和第一个输入框的级别是一样的,如果我们把查询的条件语句分一下级别, 第一个输入框为solrSQL(主查询语句): 第二个输入框为solrFQ1(子查询语句1): 第三个输入框为solrFQ2(子查询语句2): 级别:solrSQL > solrFQ1 > solrFQ2

solr多条件查询(一)

每个项目的数据结构可能不同,查询的格式有可能不同,本项目所有的字段为动态的,所以整理了一下, 1.查询所有字段中包含”测试“但是所有的TM不包含”江苏大学“ q:X_1457955996315KEY:"测试" + X_1457955996316KEY:"测试" fq:NOT X_1457955996315_TM:"江苏大学"  NOT X_1457955996316_TM:"江苏大学" fq是指在q的条件下进行二次筛选. (X

基于Solr的HBase多条件查询测试

转自:http://www.cnblogs.com/chenz/articles/3229997.html 背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase的多条件查询也有多种方案,但是这些方案要么太复杂,要么效率太低,本文只对基于Solr的HBase多条件查询方案进行测试和验证. 原理: 基于Solr的HBase多条件查询原理很简单,将HBas

基于Solr的HBase多条件查询

基于Solr的HBase多条件查询——转载: 背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力. 针对HBase的多条件查询也有多种方案,但是这些方案要么太复杂,要么效率太低,本文只对基于Solr的HBase多条件查询方案进行测试和验证. 原理: 基于Solr的HBase多条件查询原理很简单,将HBase表中涉及条件过滤的字段和rowkey在Solr中建立索引,

Solr实战:使用Hue+Solr实现标签查询

公司最近在研究多条件组合查询方案,Google的一位技术专家Sam和我们讨论了几个备选方案. Sam的信: 我做了进一步研究,目前有这么几种做法: 1) 最直接粗暴,只做一个主index,比如按行业+地区做一个index,这样来说的话,无论多少个标签的查询,直接先用主index做一个筛选,这样下来可能只有少于10w个row,然后对这10w个一个个filtering,这种做法可能能够满足大部分需求.当然,这种做法需要用到cache来优化,否则每次都去DB load会影响数据库的performanc

Solr与MySQL查询性能对比

测试数据量:10407608 Num Docs: 10407608 在项目中一个最常用的查询,查询某段时间内的数据,SQL查询获取数据,30s左右 SELECT * FROM `tf_hotspotdata_copy_test` WHERE collectTime BETWEEN '2014-12-06 00:00:00' AND '2014-12-10 21:31:55'; 对collectTime建立索引后,同样的查询,2s,快了很多. Solr索引 <!--Index Field for

C# 将Access中时间段条件查询的数据添加到ListView中

C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); l

php 多条件查询 例子

<hl>表单的多条件查询</h1> <form action="这个表.php" method="post"> <div> 请输入查询的名字:<input type="text" name="name" /> 请输入查询址性别:<input type="text" name="sex" /> <input ty

Django-rest-framework多条件查询/分页/多表Json

Django-rest-framework多条件查询/分页/多表Json django-rest-framework多条件查询需要覆写ListAPIView.get_queryset方法,代码示例: def get_queryset(self):     """     使用request.query_params实现多条件查询,也可以使用django filter ,较简单的     方法是在filter_fields中指定要过滤的字段,但只能表示等值,不灵活,灵活的方式是