solrj_solr教程 - CSDN
精华内容
参与话题
  • Solr语法解析及SolrJ使用

    千次阅读 2018-03-01 17:37:49
    Solr语法解析及SolrJ使用 标签(空格分隔): Solr 官方指南:http://lucene.apache.org/solr/quickstart.html Solrj 之HttpSolrClient 旧版本的连接服务HttpSolrServer在solr5版本后已经停用,被新的...

    Solr语法解析及SolrJ使用

    标签(空格分隔): Solr


    官方指南:http://lucene.apache.org/solr/quickstart.html

    Solrj 之HttpSolrClient

    旧版本的连接服务HttpSolrServer在solr5版本后已经停用,被新的HttpSolrClient取代,大家可以从下面的url中查看相关的API,了解更详细的变动。
    API:http://lucene.apache.org/solr/5_3_1/solr-solrj/index.html

    HttpSolrClient  server=new HttpSolrClient(url);
    //设置对应请求的目标主机线程数为1000条
    server.setDefaultMaxConnectionsPerHost(1000); server.setMaxTotalConnections(10000);
    server.setConnectionTimeout(60000);//设置连接超时时间(单位毫秒) 1000
    server.setSoTimeout(60000); 设置读数据超时时间(单位毫秒) 1000
    server.setFollowRedirects(false);//遵循从定向
    server.setAllowCompression(true);//允许压缩

    若不使用Maven工程来操作Solr,须添加一下Jar依赖包
    image_1b1is8e3b7rt1hlaa121ti1c79.png-62.9kB
    若使用Maven工程,需在pom.xml文件中添加下面依赖

    <dependency>  
         <artifactId>solr-solrj</artifactId>  
         <groupId>org.apache.solr</groupId>  
         <version>1.4.0</version>  
         <type>jar</type>  
         <scope>compile</scope>  
    </dependency> 

    定义一个solr server的java代码:

    package com.teach.server;
    
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    
    public class SolrServer {
    
        private static SolrServer solrServer = null;
        private static HttpSolrClient server=null;
    
        private static String url="http://localhost:8085/solr/test";
        public static synchronized SolrServer getInstance(){
            if(solrServer==null){
                solrServer=new SolrServer();
            }
            return solrServer;
        }
    
        public static HttpSolrClient getServer(){
            if(server==null){
                    server = new HttpSolrClient(url);
                    server.setDefaultMaxConnectionsPerHost(1000); 
                    server.setMaxTotalConnections(10000);
                    server.setConnectionTimeout(60000);//设置连接超时时间(单位毫秒) 1000
                    server.setSoTimeout(60000); 设置读数据超时时间(单位毫秒) 1000
                    server.setFollowRedirects(false);//遵循从定向
                    server.setAllowCompression(true);//允许压缩
            }
            return server;
        }
    }
    

    SolrJ添加索引

    HttpSolrClient server = SolrServer.getServer();
    SolrInputDocument doc = new SolrInputDocument();
    doc.addField("id", "123456");
    doc.addField("title_s", "test");
    doc.addField("des_s", "test des");
    try {
    server.add(doc);
    server.commit();
    } catch (Exception e) {
    e.printStackTrace();
    }
    
    Id:索引中的唯一ID,定义见配置。
    title_s:动态字符串域定义,静态见配置。
    

    SolrJ查询索引

    HttpSolrClient server = SolrServer.getServer();
    SolrQuery sQuery = new SolrQuery();
    sQuery.setQuery(str); //  默认*:* , des_s:xxx  , 具体见查询语法
    //sQuery.set("q", "des_s:test*");// 查询nickname是以chm开头的数据
    sQuery.setStart(0);      // 检索偏移量
    sQuery.setRows(5);     // 返回行数
    QueryResponse queryResponse;
    try {
        queryResponse = server.query(sQuery);
        SolrDocumentList  list = queryResponse.getResults();
            System.out.println("query result nums: " + list.getNumFound());
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i).getFieldValue("des_s"));
            }
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    SolrJ删除索引

    HttpSolrClient server = SolrServer.getServer();
    server.deleteById(“123456”);  // 单个id
    server.commit();  
    
    HttpSolrClient server = SolrServer.getServer();
    List<String> ids = new ArrayList<String>();
    ids.add(“123456”);  // id的集合
    server.deleteById(ids);
    server.commit();
    

    SolrJ之SolrBean

    注解的使用

    /**
     * @Field注解的使用 作用1:指定Bean的一个字段为
     * Field,schema.xml配置必需有这个field,不然会报错。
     */
    public class TestBO implements Serializable{
    private static final long serialVersionUID = 1L;
    @Field
    public String id;
    @Field
    public String title_s;
    @Field
    public String des_s;
    

    SolrJ Bean添加索引

    HttpSolrClient server = SolrServer.getServer();
    List<TestBO> beans = new ArrayList<TestBO>(); 
    TestBO bo = new TestBO();
    bo.setId("111111");
    bo.setTitle_s("helo world.");
    bo.setDes_s("test bean.");
    beans.add(bo);
    try {
    server.addBeans(beans);
    server.commit();
    System.out.println("----索引创建完毕!!!----");
    } catch (Exception e) {
    e.printStackTrace();
    }

    SolrJ Bean查询

    HttpSolrClient server = SolrServer.getServer();
    SolrQuery sQuery = new SolrQuery();
    sQuery.setQuery(str);
    sQuery.setStart(0);
    sQuery.setRows(5);
    QueryResponse queryResponse;
    try {
    queryResponse = server.query(sQuery);
    List<TestBO> indexBOLists = queryResponse.getBeans(TestBO.class);
    System.out.println("----------------------------" + indexBOLists.size());
    for (TestBO bo : indexBOLists) {
    System.out.println(bo.getDes_s());
    }
    } catch (Exception e) {
    e.printStackTrace();
    }

    SolrJ Bean 删除索引

    try {
    HttpSolrClient server = SolrServer.getServer();
    server.deleteByQuery(condition);
    //server.deleteById(id);
    server.commit();
    System.out.println("清理完毕!");
    } catch (SolrServerException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    SolrJ常用查询参数

    q - 查询字符串,必须的参数
    fl - 指定返回那些字段内容,用逗号或空格分隔多个。
    start - 返回第一条记录在完整找到结果中的偏移位置,0开始。
    rows - 指定返回结果最多有多少条记录,配合start来实现分页。
    sort - 排序,示例:(inStock desc, price asc)表示先 “inStock”降序, 再 “price”升序,默认是相关性降序。
    wt - (writer type)指定输出格式,可以有 xml, json, php, phps。
    fq - (filter query )过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。
    官方文档:http://wiki.apache.org/solr/CommonQueryParameters

    SolrJ检索运算符

    “:”指定字段查指定值,如返回所有值*:*
    “?”表示单个任意字符的通配
    “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
    “~”表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
    邻近检索,如检索相隔10个单词的“apache”和”“akarta”,“jakarta apache” ~10
    “^”控制相关度检索,如检索jakarta apache,同时希望去让“jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache
    布尔操作符AND、||
    布尔操作符OR、&&
    布尔操作符NOT、!、-(排除操作符不能单独与项使用构成查询)
    “+”存在操作符,要求符号“+”后的项必须在文档相应的域中存在
    ( )用于构成子查询
    [ ]包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
    { }不包含范围检索,如检索某时间段记录,不包含头尾date:{200707 TO 200710}
    ” 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : "

    Multicore查询

    HttpSolrClient server = SolrServer.getServer();
    SolrQuery sQuery = new SolrQuery();
    sQuery.setQuery(str);
    sQuery.setStart(0);
    sQuery.setRows(5);
    sQuery.set("shards", "localhost:8081/solr/test,localhost:8081/solr/core1,localhost:8081/solr/core2");
    QueryResponse queryResponse;
    try {
    queryResponse = server.query(sQuery);
    List<TestBO> indexBOLists = queryResponse.getBeans(TestBO.class);
    for (TestBO bo : indexBOLists) {
    System.out.println(bo.getDes_s());
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    

    Solr Cloud

    SolrCloud是基于Solr和Zookeeper的分布式搜索方案,也是Solr5的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能:
    1)集中式的配置信息
    2)自动容错
    3)近实时搜索
    4)查询时自动负载均衡
    Solr集群:
    基本可以用下面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在三个Shard里面,每个Shard包含三个Solr节点,一个是Leader节点,另外两个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新结束完成,最后将版本号和文档转发给同属于一个Shard的replicas节点。
    具体节点信息我们在后续进入Zookeeper管理节点查看。
    image_1b1j07a7pm8fqp41ufnlg91cl3m.png-77.1kB

    SolrJ操作SolrCloud

    获取CloudSolrClient

    public static CloudSolrClient getServer() {
    final String zkHost = "localhost:2181,localhost:2182,localhost:2183";
    final String defaultCollection = "core1";
    final int zkClientTimeout = 20000;
    final int zkConnectTimeout = 1000;
    CloudSolrClient cloudSolrServer = new CloudSolrClient(zkHost);
    System.out.println("The Cloud SolrServer Instance has benn created!");
    cloudSolrServer.setDefaultCollection(defaultCollection);
    cloudSolrServer.setZkClientTimeout(zkClientTimeout);
    cloudSolrServer.setZkConnectTimeout(zkConnectTimeout);
    cloudSolrServer.connect();
    return cloudSolrServer;
    }

    获取CloudSolrClient的代码

    package com.teach.server;
    
    import org.apache.solr.client.solrj.impl.CloudSolrClient;
    
    public class CloudSolrServer {
    public static CloudSolrClient server = null;
        public static CloudSolrClient getServer() {
            final String zkHost = "localhost:2181,localhost:2182,localhost:2183";
            final String defaultCollection = "core1";
            final int zkClientTimeout = 20000;
            final int zkConnectTimeout = 1000;
            server = new CloudSolrClient(zkHost);
            server.setDefaultCollection(defaultCollection);
            server.setZkClientTimeout(zkClientTimeout);
            server.setZkConnectTimeout(zkConnectTimeout);
    
            server.connect();
            return server;
        }
        public static void main(String[] args) {
            System.out.println(getServer());
        }
    
    }

    SolrCloud添加索引

    CloudSolrClient solrServer = getServer();
    SolrInputDocument doc1 = new SolrInputDocument();
    doc1.addField("id", "1");
    doc1.addField("name", "王海");
    SolrInputDocument doc2 = new SolrInputDocument();
    doc2.addField("id", "2");
    doc2.addField("name", "张芳");
    SolrInputDocument doc3 = new SolrInputDocument();
    doc3.addField("id", "3");
    doc3.addField("name", "刘俊");
    Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
    docs.add(doc1);
    docs.add(doc2);
    docs.add(doc3);
    solrServer.add(docs);
    solrServer.commit();
    //其它删除和查询都与单机一样,仅连接不同。

    SolrCloud查询索引

    SolrQuery query = new SolrQuery();
    query.setQuery(String);
    try {
    CloudSolrClient solrServer = getServer();
    QueryResponse response = solrServer.query(query);
    SolrDocumentList docs = response.getResults();
    System.out.println("文档个数:" + docs.getNumFound());
    System.out.println("查询时间:" + response.getQTime());
    for (SolrDocument doc : docs) {
    String name = (String) doc.getFieldValue("name");
    System.out.println("name: " + name);
    }
    } catch (SolrServerException e) {
    e.printStackTrace();
    } catch (Exception e) {
    e.printStackTrace();
    }

    SolrCloud删除索引

    public static void delteIndex() {
    try {
    CloudSolrClient server = SolrCloudServer.getServer();
    server.deleteByQuery("*:*");
    server.commit();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    Solr索引主从同步

    Solr主从复制

    SOLR复制模式,是一种在分布式环境下用于同步主从服务器的一种实现方式,因之前提到的基于rsync的SOLR不同方式部署成本过高,取而代之的就是基于HTTP协议的索引文件传输机制,该方式部署简单,只需配置一个文件即可。以下讲解具体操作步骤: 步骤分主服务器和从服务器,允许有多个从服务器,即从服务器的配置一样。

    主服务器修改solrConfig.xml

    <requestHandler name="/replication" class="solr.ReplicationHandler">
    <lst name="master">  
            <str name="replicateAfter">commit</str>
            <str name="replicateAfter">startup</str>  
            <str name="confFiles">schema.xml,stopwords.txt</str>  
            <str name="commitReserveDuration">00:01:00</str>
        </lst> 
    </requestHandler>

    说明:replicateAfter : SOLR会自行在以下操作行为发生后执行复制: ‘commit’, ‘startup’ ‘optimize’,这里我们选择commit , 即SOLR每一次接受到commit请求后,会执行复制策略。
    confFiles : 待分发的配置文件,solr也会将主服务器上的字段配置文件:schema.xml和stopwords.txt,固排文件: elevate.xml同步到辅服务器上。
    commitReserveDuration: 每次commit之后,保留增量索引的周期时间,这里设置为1分钟。

    从服务器修改solrConfig.xml

    <requestHandler name="/replication" class="solr.ReplicationHandler">
        <lst name="slave">  
            <str name="masterUrl">http://localhost:8081/solr/core1/replication</str>  
            <str name="pollInterval">00:01:00</str>  
            <str name="compression">internal</str>  
            <str name="httpConnTimeout">2000</str>  
            <str name="httpReadTimeout">6000</str>  
        </lst>
    </requestHandler>

    说明:
    masterUrl : 主服务器同步URL地址
    pollInterval:从服务器同步间隔,即每隔多长时间同步一次主服务器
    httpConnTimeout:设置连接超时(单位:毫秒)
    httpReadTimeout:如果设置同步索引文件过大,则应适当提高此值。(单位:毫秒)
    httpBasicAuthUser:验证用户名,需要和主服务器一致
    httpBasicAuthPassword:验证密码,需和主服务器一致
    compression:external or internal 使用SOLR自己的压缩算法或应用容器的


    Solr之Facet

    Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验,在搜索关键字的同时,能够按照Facet的字段进行分组并统计。
    比如你上淘宝,输入“笔记本”进行搜索,就会出现品牌分类,价格范围等分类,这个就叫facet了。这个例子也许不是那么准确的描述facet,不过基本上就是这个意思。对输入关键字后搜索出来的结果再进行分类。
    solr有几种facet:
    普通facet,比如从厂商品牌的维度建立fact。 查询facet,比如根据价格查询时,将根据价格,设置多个区间,比如0-10, 10-20, 20-30等。 日期facet, 也是一种特殊的范围查询,比如按照月份进行facet。

    Facet查询

    进行Facet查询需要在请求参数中加入“facet=on”或“facet=true”,只有这样Facet组件才起作用。
    1.Field Facet
    Facet字段通过在请求中加入“facet.field”参数加以声明,如果需要对多个字段进行Facet查询,那么将该参数声明多次.比如
    http://localhost:8081/solr/select?q=联想&facet=on&facet.field=cpu&facet.field=videoCard
    各个Facet字段互不影响,且可以针对每个Facet字段设置查询参数.以下介绍的参数既可以应用于所有的Facet字段,也可以应用于每个单独的Facet字段.应用于单独的字段时通过 f.字段名.参数名=参数值,这种方式调用。比如facet.prefix参数应用于cpu字段,可以采用如下形式
    f.cpu.facet.prefix=Intel
    实例分析一:

    sQuery.setFacet(true);//设置facet=on
    sQuery.addFacetField(new String[] { "subMajor_s","brand_s" });//设置需要facet的字段
    sQuery.setFacetLimit(1000);//-1 // 限制facet返回的数量
    sQuery.setFacetMissing(false);// 不统计null的值
    sQuery.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示
    sQuery.addFacetQuery("price_i:[1000 TO 10000]");
    sQuery.setQuery(para);
    QueryResponse queryResponse;
    queryResponse = solrServer.query(sQuery);
    List<FacetField> facets = queryResponse.getFacetFields();// 返回的facet列表

    实例分析二:

    for (FacetField facet :facets) {
             System.out.println(facet.getName());
             System.out.println("----------------");
             List<Count>counts = facet.getValues();
             for (Count count : counts){
                System.out.println(count.getName()+":"+ count.getCount());
             }
             System.out.println();
          }
          //注:建立索引时加上价格区间的字段,就可以实现检索时显示动态的价格筛选条件

    喜欢我的文章请关注微信公众号DTSpider

    这里写图片描述

    展开全文
  • 使用solrJ操作solr常用方法

    万次阅读 2017-08-07 22:49:06
    既然学的是java那么肯定需要用java代码来进行对solr的操作,如果知道在solr后台管理界面进行增删改查等操作,那么用solrJ操作solr会更好理解。

    既然学的是java那么肯定需要用java代码来进行对solr的操作,如果知道在solr后台管理界面进行增删改查等操作,那么用solrJ操作solr会更好理解。

    solrJ介绍
    solrJ是一个用来访问solr的java客户端,提供了索引和搜索的方法(将一些常用的命令封装进去了),通过solrJ提供的API 接口来操作solr服务。
    这里写图片描述

    准备工作
    创建个maven工程(普通的java工程都可以不过需要自己导包),添加依赖如下:

    <dependencies>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>4.10.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
      </dependencies>

    注:有的大神介绍说添加第一个solrj的依赖就行,但是我这里测试的时候发现还是需要commons-logging的依赖的,另外,如果你本地仓库没有zookeeper-3.4.6.jar跟slf4j-api-1.7.6.jar也会直接报错,自己去网上下一个吧,最终包结构我也截了个图。
    这里写图片描述

    然后启动solr服务器,接下来进行操作。
    1、添加文档

        /*
         * 测试向索引库中添加文档
         */
        @Test
        public void testSave() throws Exception{
            //1.创建连接对象
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //2.创建一个文档对象
            SolrInputDocument inputDocument = new SolrInputDocument();
            //向文档中添加域以及对应的值,注意:所有的域必须在schema.xml中定义过,前面已经给出过我定义的域。
            inputDocument.addField("id", "1");
            inputDocument.addField("item_title", "sansung爆炸牌手机");
            inputDocument.addField("item_price", 666);
            inputDocument.addField("item_image", "www.boom.png");
            //3.将文档写入索引库中
            solrServer.add(inputDocument);
            //提交
            solrServer.commit();
        }

    后台管理界面查询id为1的商品看看
    这里写图片描述
    2、修改文档

        /*
         * 测试修改索引库中已存在的文档
         */
        @Test
        public void testUpdate() throws Exception{
            //1.创建连接对象
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //2.创建一个文档对象
            SolrInputDocument inputDocument = new SolrInputDocument();
            inputDocument.addField("id", "1");
            //修改id为1的商品的信息(如果该商品不存在其实就是添加了)
            inputDocument.addField("item_title", "vivo手机hahaha");
            inputDocument.addField("item_price", 6666);
            inputDocument.addField("item_image", "www.123.png");
            //3.将文档写入索引库中
            solrServer.add(inputDocument);
            //提交
            solrServer.commit();
        }

    再去后台管理页面查询id为1的商品看看
    这里写图片描述
    3、删除文档

        /*
         * 测试删除文档:根据id删除文档 *
         */
        @Test
        public void testDeleteById() throws Exception{
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //删除文档
            solrServer.deleteById("1");
            //提交
            solrServer.commit();
        }
        /*
         * 测试删除文档:根据查询结果删除文档(重新添加id为1的文档)
         */
        @Test
        public void testDeleteByQ() throws Exception{
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //根据查询结果删除文档,注意:用item_image的查询结果来进行删除是不行的
            //因为制定业务域的时候indexed=false,即不被索引,此时是不能根据图片来查询的。
            solrServer.deleteByQuery("item_title:vivo手机hahaha");
            solrServer.commit();
        }

    不管是根据id删除还是根据查询删除都能达到一样的效果。
    4、查询索引

    1、简单根据id查询索引

        /*
         * 简单查询:查询单个商品信息
         */
        @Test
        public void testSimpleQ() throws Exception{
            //1.创建连接
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //2.创建查询语句
            SolrQuery query = new SolrQuery();
            //3.设置查询条件
            query.set("q", "id:1");
            //4.执行查询
            QueryResponse queryResponse = solrServer.query(query);
            //5.取文档列表public class SolrDocumentList extends ArrayList<SolrDocument>
            SolrDocumentList documentList = queryResponse.getResults();
            for (SolrDocument solrDocument : documentList) {
                //取各个文档信息
                System.out.println("商品id:"+solrDocument.get("id")+" ");
                System.out.println("商品标题:"+solrDocument.get("item_title")+" ");
                System.out.println("商品价格:"+solrDocument.get("item_price")+" ");
                System.out.println("商品图片:"+solrDocument.get("item_image")+" ");
            }
        }
    输出结果:
    商品id:1 
    商品标题:vivo手机hahaha 
    商品价格:6666 
    商品图片:www.123.png 

    2、设置条件进行查询

    @Test
        public void testSimpleQ2 () throws Exception{
            //1.创建连接
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //2.创建查询语句
            SolrQuery query = new SolrQuery();
            //3.设置查询条件
            query.set("q", "夏普");//设置查询关键字
            query.setSort("id", ORDER.desc);//按照id降序排列
            query.setStart(1);
            query.setRows(3);//分页条件
            query.set("df", "item_title");//默认在商品标题域进行查询
            //4、执行查询
            QueryResponse queryResponse = solrServer.query(query);
            //5.获取文档列表
            SolrDocumentList documentList = queryResponse.getResults();
            //获取总记录数
            long numFound = documentList.getNumFound();
            System.out.println("总记录数:" + numFound);
            for (SolrDocument solrDocument : documentList) {
                //取各个文档信息
                System.out.print("商品id:"+solrDocument.get("id")+" ");
                System.out.print("商品标题:"+solrDocument.get("item_title")+" ");
                System.out.print("商品价格:"+solrDocument.get("item_price")+" ");
                System.out.println();
            }
        }

    注:如果设置了默认查询域的话,自己又不想在这个域内查那么在查询关键字前要注明要在哪个域查,比如:”item_price:600”

    输出结果:
    总记录数:19
    商品id:936920 商品标题:夏普(SHARPLCD-52DS70A 52英寸 日本原装液晶面板 3D Android操作系统智能液晶电视 商品价格:699900 
    商品id:816753 商品标题:夏普(SHARPLCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视 商品价格:379900 
    商品id:1356054 商品标题:夏普(SHARPLCD-50DS72A 50英寸 无线网络 安卓智能 4K超高清液晶电视 商品价格:549900 

    3、带高亮的复杂查询

        /*
         * 测试复杂查询:取高亮
         */
        @Test
        public void testHighLighting() throws Exception{
            //1、创建连接
            SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
            //2、创建查询语句
            SolrQuery query = new SolrQuery();
            //3、设置查询条件
            query.set("q", "夏普");//设置查询关键字
            query.setSort("id", ORDER.desc);//按照id降序排列
            query.setStart(1);
            query.setRows(5);//分页条件
            query.set("df", "item_title");
    
            //开启高亮显示
            query.setHighlight(true);
            query.setHighlightSimplePre("<em>");
            query.setHighlightSimplePost("</em>");
    
            //4、执行查询
            QueryResponse queryResponse = solrServer.query(query);
            //5、取高亮
            Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
            //6、获取文档列表
            SolrDocumentList documentList = queryResponse.getResults();
            //7、遍历查询结果
            for (SolrDocument solrDocument : documentList) {
                System.out.print(solrDocument.get("id")+" ");
                List<String> titleList = highlighting.get(solrDocument.get("id")).get("item_title");
                if (titleList !=null && titleList.size()>0) {
                    //能取到高亮,输出高亮
                    System.out.print(titleList.get(0));
                }
                System.out.println();
            }
    
        }
    输出结果:
    936920 <em>夏普</em>(SHARP)LCD-52DS70A 52英寸 日本原装液晶面板 3D Android操作系统智能液晶电视
    816753 <em>夏普</em>(SHARP)LCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视
    1356054 <em>夏普</em>(SHARP)LCD-50DS72A 50英寸 无线网络 安卓智能 4K超高清液晶电视
    1322968 <em>夏普</em>(SHARP)LCD-40DS13A 40英寸液晶电视
    1322963 <em>夏普</em>(SHARP)LCD-32DS13A 32英寸液晶电视

    如果看了关于在solr后台管理页面进行的相关操作后,再看这个solrJ应该就瞬间会了。

    展开全文
  • Solr文档学习--Solrj的使用

    千次阅读 2016-09-12 22:59:12
    Solrj的简单使用

    首先启动solr

    solr.cmd start
    

    这里写图片描述

    SolrClient

    主要通过SolrClient来连接到Solr服务器

    这里写图片描述

    SolrClient有4个实现类

    CloudSolrClient

    SolrJ client class to communicate with SolrCloud. Instances of this class communicate with Zookeeper to discover Solr endpoints for SolrCloud collections, and then use the {@link BHttpSolrClient} to issue requests.

    用来连接到SolrCloud的

    ConcurrentUpdateSolrClient

    ConcurrentUpdateSolrClient buffers all added documents and writes them into open HTTP connections. This class is thread safe. Params from {@link UpdateRequest} are converted to http request parameters. When params change between UpdateRequests a new HTTP request is started.

    线程安全的SolrClient

    LBHttpSolrClient

    LBHttpSolrClient or “LoadBalanced HttpSolrClient” is a load balancing wrapper around {@link HttpSolrClient}. This is useful when you have multiple Solr servers and the requests need to be Load Balanced among them.

    负载均衡的HttpSolrClient

    HttpSolrClient

    A SolrClient implementation that talks directly to a Solr server via HTTP

    通过HTTP直接连接到Solr服务器

    SolrClient

    javaDoc解释

    There are two ways to use an HttpSolrClient:
    1) Pass a URL to the constructor that points directly at a particular core

     
    SolrClient client = new HttpSolrClient("http://my-solr-server:8983/solr/core1");
    QueryResponse resp = client.query(new SolrQuery(":"));

    In this case, you can query the given core directly, but you cannot query any other cores or issue CoreAdmin requests with this client.
    2) Pass the base URL of the node to the constructor
     
    SolrClient client = new HttpSolrClient("http://my-solr-server:8983/solr");
    QueryResponse resp = client.query("core1", new SolrQuery(":"));

    In this case, you must pass the name of the required core for all queries and updates, but you may use the same client for all cores, and for CoreAdmin requests.

    这里写图片描述

    正确的实现方式

    在查询中指出collection(我的collection为mycollections)

        String url = "http://localhost:8983/solr";
        SolrClient client = new HttpSolrClient.Builder(url).build();
        QueryResponse resp = client.query("mycollections", new SolrQuery("*:*"));

    在连接url中指出collection

        String url = "http://localhost:8983/solr/mycollections";
        SolrClient client = new HttpSolrClient.Builder(url).build();
        QueryResponse resp = client.query(new SolrQuery("*:*"));

    管理员客户端的查询结果

    这里写图片描述

    看一下程序的运行结果

    {
        responseHeader = {
            status = 0,
            QTime = 0,
            params = {
                q =  *  :  * ,
                wt = javabin,
                version = 2
            }
        },
        response = {
            numFound = 1,
            start = 0,
            docs = [SolrDocument {
                    id = 123456,
                    info = [我爱北京天安门],
                    _version_ = 1544602190025326592
                }
            ]
        }
    }

    顺利连接到服务器

    添加/更新

    定义一个文章实体,包括id,标题,时间,作者,内容

    import java.util.Arrays;
    import java.util.Date;
    
    import org.apache.solr.client.solrj.beans.Field;
    import org.springframework.data.annotation.Id;
    
    public class Article {
        @Id
        @Field
        private String id;
        @Field
        private String[] title;
        @Field
        private Date[] time;
        @Field
        private String[] author;
        @Field
        private String[] info;
        // 省略getter和setter
    }

    初始化

        private static SolrClient client;
        private static String url;
        static {
            url = "http://localhost:8983/solr/mycollections";
            client = new HttpSolrClient.Builder(url).build();
        }

    添加/更新方法

        /**
         * 保存或者更新solr数据
         * 
         * @param res
         */
        public static boolean saveSolrResource(Article article) {
    
            DocumentObjectBinder binder = new DocumentObjectBinder();
            SolrInputDocument doc = binder.toSolrInputDocument(article);
            try {
                client.add(doc);
                System.out.println(client.commit());
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }

    测试

            Article article = new Article();
            article.setId("123456");
            article.setTitle(new String[] {"测试solr"});
            article.setAuthor(new String[]{"程高伟"});
            article.setTime(new Date[]{new Date()});
            article.setInfo(new String[]{"The Files screen lets you browse & view the various configuration files"});
            saveSolrResource(article);

    这里写图片描述

    如果id相同则是修改操作

    删除

        /**
         * 删除solr 数据
         * 
         * @param id
         */
        public static boolean removeSolrData(String id) {
            try {
                client.deleteById(id);
                client.commit();
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }

    根据id删除

    查询

            SolrQuery query = new SolrQuery();
            query.setQuery("程高伟");
            QueryResponse rsp = client.query(query);
            List<Article> articleList = rsp.getBeans(Article.class);
            System.out.println(articleList);

    结果

    这里写图片描述

    Solr还有很多高级功能。

    目前存在的问题是只能是字符串,而且是字符串数组。

    还有自定义schema好好研究一下。

    参考文献

    http://wiki.apache.org/solr/Solrj#Reading_Data_from_Solr

    http://101.110.118.72/archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-6.1.pdf

    展开全文
  • SolrJ的使用

    千次阅读 2011-08-24 19:19:33
    CommonsHttpSolrServer CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。Java代码 String url = "http://localhost:8983/solr"; SolrServer s

    CommonsHttpSolrServer

        CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。

    Java代码 复制代码 收藏代码
    1. String url = "http://localhost:8983/solr";   
    2.   SolrServer server = new CommonsHttpSolrServer( url );  
    String url = "http://localhost:8983/solr";
      SolrServer server = new CommonsHttpSolrServer( url );
    

     

       CommonsHttpSolrServer 是线程安全的,建议重复使用CommonsHttpSolrServer 实例。

      Setting XMLResponseParser

         sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。

       

    Java代码 复制代码 收藏代码
    1. server.setParser(new XMLResponseParser());  
    server.setParser(new XMLResponseParser());
    

     

       Changing other Connection Settings

          CommonsHttpSorlrServer 允许设置链接属性。

         

    Java代码 复制代码 收藏代码
    1. String url = "http://localhost:8983/solr"  
    2.   CommonsHttpSolrServer server = new CommonsHttpSolrServer( url );   
    3.   server.setSoTimeout(1000);  // socket read timeout   
    4.   server.setConnectionTimeout(100);   
    5.   server.setDefaultMaxConnectionsPerHost(100);   
    6.   server.setMaxTotalConnections(100);   
    7.   server.setFollowRedirects(false);  // defaults to false   
    8.   // allowCompression defaults to false.   
    9.   // Server side must support gzip or deflate for this to have any effect.   
    10.   server.setAllowCompression(true);   
    11.   server.setMaxRetries(1); // defaults to 0.  > 1 not recommended.  
    String url = "http://localhost:8983/solr"
      CommonsHttpSolrServer server = new CommonsHttpSolrServer( url );
      server.setSoTimeout(1000);  // socket read timeout
      server.setConnectionTimeout(100);
      server.setDefaultMaxConnectionsPerHost(100);
      server.setMaxTotalConnections(100);
      server.setFollowRedirects(false);  // defaults to false
      // allowCompression defaults to false.
      // Server side must support gzip or deflate for this to have any effect.
      server.setAllowCompression(true);
      server.setMaxRetries(1); // defaults to 0.  > 1 not recommended.
    

     

    EmbeddedSolrServer

          EmbeddedSorrServer提供和CommonsHttpSorlrServer相同的接口,它不需要http连接。

         

    Java代码 复制代码 收藏代码
    1. //注意,下面的属性也是可以在jvm参数里面设置的   
    2.   System.setProperty("solr.solr.home""/home/shalinsmangar/work/oss/branch-1.3/example/solr");   
    3.   CoreContainer.Initializer initializer = new CoreContainer.Initializer();   
    4.   CoreContainer coreContainer = initializer.initialize();   
    5.   EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");    
    //注意,下面的属性也是可以在jvm参数里面设置的
      System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr");
      CoreContainer.Initializer initializer = new CoreContainer.Initializer();
      CoreContainer coreContainer = initializer.initialize();
      EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");  
    

      

       如果你想要使用 Multicore 特性,那么你可以这样使用:

      

    Java代码 复制代码 收藏代码
    1. File home = new File( getSolrHome() );   
    2.    File f = new File( home, "solr.xml" );   
    3.    multicore.load( getSolrHome(), f );   
    4.   
    5.    EmbeddedSolrServer server = new EmbeddedSolrServer( multicore, "core name as defined in solr.xml" );  
     File home = new File( getSolrHome() );
        File f = new File( home, "solr.xml" );
        multicore.load( getSolrHome(), f );
    
        EmbeddedSolrServer server = new EmbeddedSolrServer( multicore, "core name as defined in solr.xml" );
    

     

        如果你在你的项目中内嵌solr服务,这将是一个不错的选择。无论你能否使用http,它都提供相同的接口。

      用法

        solrj 被设计成一个可扩展的框架,用以向solr服务器提交请求,并接收回应。

        我们已经将最通用的一些命令封装在了solrServer类中了。

     

       Adding Data to Solr

    •     首先需要获得一个server的实例, 
    Java代码 复制代码 收藏代码
    1. SolrServer server = getSolrServer();  
     SolrServer server = getSolrServer();
    
    • 如果,你使用的是一个远程的solrServer的话呢,你或许会这样来实现getSolrServer()这个方法:      
    Java代码 复制代码 收藏代码
    1. public SolrServer getSolrServer(){   
    2.     //the instance can be reused   
    3.     return new CommonsHttpSolrServer();   
    4. }  
    public SolrServer getSolrServer(){
        //the instance can be reused
        return new CommonsHttpSolrServer();
    }
    

     

    • 如果,你使用的是一个本地的solrServer的话,你或许会这样来实现getSolrServer()方法:      
    Java代码 复制代码 收藏代码
    1. public SolrServer getSolrServer(){   
    2.     //the instance can be reused   
    3.     return new EmbeddedSolrServer();   
    4. }  
    public SolrServer getSolrServer(){
        //the instance can be reused
        return new EmbeddedSolrServer();
    }
    

     

    • 如果,你在添加数据之前,想清空现有的索引,那么你可以这么做:

            

    Java代码 复制代码 收藏代码
    1. server.deleteByQuery( "*:*" );// delete everything!  
    server.deleteByQuery( "*:*" );// delete everything!
    

     

    • 构造一个document

             

    Java代码 复制代码 收藏代码
    1. SolrInputDocument doc1 = new SolrInputDocument();   
    2.  doc1.addField( "id""id1"1.0f );   
    3.  doc1.addField( "name""doc1"1.0f );   
    4.  doc1.addField( "price"10 );  
       SolrInputDocument doc1 = new SolrInputDocument();
        doc1.addField( "id", "id1", 1.0f );
        doc1.addField( "name", "doc1", 1.0f );
        doc1.addField( "price", 10 );
    

     

    • 构造另外一个文档,每个文档都能够被独自地提交给solr,但是,批量提交是更高效的。每一个对SolrServer的请求都是http请求,当然对于EmbeddedSolrServer来说,是不一样的。     
    Java代码 复制代码 收藏代码
    1. SolrInputDocument doc2 = new SolrInputDocument();   
    2. doc2.addField( "id""id2"1.0f );   
    3. doc2.addField( "name""doc2"1.0f );   
    4. doc2.addField( "price"20 );  
        SolrInputDocument doc2 = new SolrInputDocument();
        doc2.addField( "id", "id2", 1.0f );
        doc2.addField( "name", "doc2", 1.0f );
        doc2.addField( "price", 20 );
    

     

    • 构造一个文档的集合

            

    Java代码 复制代码 收藏代码
    1. Collection<SolrInputDocument> docs = new  ArrayList<SolrInputDocument>();   
    2.  docs.add( doc1 );   
    3.  docs.add( doc2 );  
       Collection<SolrInputDocument> docs = new  ArrayList<SolrInputDocument>();
        docs.add( doc1 );
        docs.add( doc2 );
    

     

    • 将documents提交给solr
    Java代码 复制代码 收藏代码
    1. server.add( docs );  
    server.add( docs );
    

     

    • 提交一个commit
    Java代码 复制代码 收藏代码
    1. server.commit();  
     server.commit();
    • 在添加完documents后,立即做一个commit,你可以这样来写你的程序:
    Java代码 复制代码 收藏代码
    1. UpdateRequest req = new UpdateRequest();    
    2.  req.setAction( UpdateRequest.ACTION.COMMIT, falsefalse );   
    3. req.add( docs );   
    4.  UpdateResponse rsp = req.process( server );    
        UpdateRequest req = new UpdateRequest(); 
         req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
        req.add( docs );
         UpdateResponse rsp = req.process( server );  
    

     

     

    Streaming documents for an update

     

    在很多的情况下,StreamingUpdateSolrServer也挺有用的。如果你使用的是solr1.4以上的版本的话,下面的代码,或许会用得着。下面的这种方法挺好用的,尤其是当你向服务器提交数据的时候。

    .

     

    CommonsHttpSolrServer server = new CommonsHttpSolrServer();
    Iterator<SolrInputDocument> iter = new Iterator<SolrInputDocument>(){
         public boolean hasNext() {
            boolean result ;
            // set the result to true false to say if you have more documensts
            return result;
          }
    
          public SolrInputDocument next() {
            SolrInputDocument result = null;
            // construct a new document here and set it to result
            return result;
          }
    };
    server.add(iter);

     

    you may also use the addBeans(Iterator<?> beansIter) method to write pojos 

    Directly adding POJOs to Solr

    •    使用 java 注释创建java bean。@Field ,可以被用在域上,或者是setter方法上。如果一个域的名称跟bean的名称是不一样的,那么在java注释中填写别名,具体的,可以参照下面的域categories          
    Java代码 复制代码 收藏代码
    1. import org.apache.solr.client.solrj.beans.Field;   
    2.   
    3.  public class Item {   
    4.     @Field  
    5.     String id;   
    6.   
    7.     @Field("cat")   
    8.     String[] categories;   
    9.   
    10.     @Field  
    11.     List<String> features;   
    12.   
    13.   }  
    import org.apache.solr.client.solrj.beans.Field;
    
     public class Item {
        @Field
        String id;
    
        @Field("cat")
        String[] categories;
    
        @Field
        List<String> features;
    
      }
    

     

    • java注释也可以使用在setter方法上,如下面的例子:

            

    Java代码 复制代码 收藏代码
    1. @Field("cat")   
    2.  public void setCategory(String[] c){   
    3.      this.categories = c;   
    4.  }  
      @Field("cat")
       public void setCategory(String[] c){
           this.categories = c;
       }
    

              这里应该要有一个相对的,get方法(没有加java注释的)来读取属性

    • Get an instance of server
    Java代码 复制代码 收藏代码
    1. SolrServer server = getSolrServer();  
     SolrServer server = getSolrServer();
    

     

    • 创建bean实例

            

    Java代码 复制代码 收藏代码
    1. Item item = new Item();   
    2.  item.id = "one";   
    3.  item.categories =  new String[] { "aaa""bbb""ccc" };  
       Item item = new Item();
        item.id = "one";
        item.categories =  new String[] { "aaa", "bbb", "ccc" };
    

     

    • 添加给solr          
    Java代码 复制代码 收藏代码
    1. server.addBean(item);  
    server.addBean(item);
    

     

    • 将多个bean提交给solr

         

    Java代码 复制代码 收藏代码
    1. List<Item> beans ;   
    2.  //add Item objects to the list   
    3.  server.addBeans(beans);     
     List<Item> beans ;
      //add Item objects to the list
      server.addBeans(beans);   
    

        注意: 你可以重复使用SolrServer,这样可以提高性能。

      Reading Data from Solr

    •    获取solrserver的实例

                

    Java代码 复制代码 收藏代码
    1. SolrServer server = getSolrServer();  
    SolrServer server = getSolrServer();

     

    •    构造 SolrQuery

         

    Java代码 复制代码 收藏代码
    1. SolrQuery query = new SolrQuery();   
    2. query.setQuery( "*:*" );   
    3. query.addSortField( "price", SolrQuery.ORDER.asc );  
        SolrQuery query = new SolrQuery();
        query.setQuery( "*:*" );
        query.addSortField( "price", SolrQuery.ORDER.asc );
    

     

    •    向服务器发出查询请求

        

    Java代码 复制代码 收藏代码
    1. QueryResponse rsp = server.query( query );     
    QueryResponse rsp = server.query( query );   

     

    •    获取结果。

        

    Java代码 复制代码 收藏代码
    1. SolrDocumentList docs = rsp.getResults();  
    SolrDocumentList docs = rsp.getResults();
    

     

    •    想要以javabean的方式获取结果,那么这个javabean必须像之前的例子一样有java注释。
      Java代码 复制代码 收藏代码
      1. List<Item> beans = rsp.getBeans(Item.class);  
       List<Item> beans = rsp.getBeans(Item.class);
      
       

        高级用法

           solrJ 提供了一组API,来帮助我们创建查询,下面是一个faceted query的例子。

    Java代码 复制代码 收藏代码
    1. SolrServer server = getSolrServer();   
    2.  SolrQuery solrQuery = new  SolrQuery().   
    3.                setQuery("ipod").   
    4.                setFacet(true).   
    5.                setFacetMinCount(1).   
    6.                setFacetLimit(8).   
    7.                addFacetField("category").   
    8.                addFacetField("inStock");     
    9.  QueryResponse rsp = server.query(solrQuery);  
     SolrServer server = getSolrServer();
      SolrQuery solrQuery = new  SolrQuery().
                    setQuery("ipod").
                    setFacet(true).
                    setFacetMinCount(1).
                    setFacetLimit(8).
                    addFacetField("category").
                    addFacetField("inStock");  
      QueryResponse rsp = server.query(solrQuery);
    

     所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。

     

    展开全文
  • solrj的使用

    2020-07-24 23:32:34
    NULL 博文链接:https://747017186.iteye.com/blog/2111497
  • Solr和Solrj的使用

    千次阅读 2019-05-17 10:31:56
    Solrj 部署环境 1.拷贝solr solr-4.10.3\example\solr 目录到【如E:/solr/】,重命名solr为solrhome 【E:/solr/solrhome】 solrhome:solr里面有几个文件 ``collection1`:有一个默认名称为collection1的SolrCore...
  • 使用SolrJ操作Solr7.4

    千次阅读 2018-09-02 14:18:19
    SolrJ操作Solr很简单,一看就懂,我就不用多说 引入依赖 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.apache.solr&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&...
  • /** @Project JobsOtherWebSearch ...@ClassName: SearchJobs @Author fjsh @Description: 对solr中的各个功能进行测试 @Date 2014-3-5 下午3:38:09 */ public class SearchJobs { private static String url = ...
  • Solr-Solrj简单使用

    2020-04-02 16:14:16
    一、SolrJ简介 SolrJ是操作Solr的Java客户端,它提供了增加、修改、删除、查询Solr索引的Java接口。通过solrJ提供的API接口来操作solr服务,SolrJ底层是通过使用httpClient中的方法来完成Solr的操作。 二、依赖配置 ...
  • solrj

    万次阅读 2018-11-20 21:28:04
    应用场景 ... solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: Solrj和图形界面操作的区别就类似于数据库中你使用j
  • solrJ

    2018-04-08 20:26:35
    package solr;import java.io.IOException;import java.util.List;...import org.apache.solr.client.solrj.SolrClient;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.c...
  • SolrJ

    2018-10-06 20:39:14
    版权声明:博主地址:... SolrJ是Solr的客户端,简化开发量 这里需要jar包有:...
  • 前言 在Solr使用过程中,对Solr版本进行了升级...使用SolrJ8.2.0最新版连接solr服务实现新增/查询/删除 1、使用solrj需要导入依赖包: <dependency> <groupId>org.apache.solr</groupId> ...
  • solrJ使用

    2017-12-12 16:07:07
    描述solr的一些基本参数用法,solrJ的几个重要类介绍以及solrJ的使用
  • 不多说了,直接上代码 package ... import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar;...import java.util.HashMap;...import
  • solrj 对solr 的操作

    千次阅读 2015-02-05 18:05:01
    使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法,来操作solr的API的。SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作。 1、 首先,你需要添加如下jar包 其中...
  • SolrJ 复杂查询 高亮显示

    千次阅读 2020-08-01 09:15:51
    SolrJ 复杂查询 高亮显示上一章搭建了Solr服务器和导入了商品数据,本章通过SolrJ去学习Solr在企业中的运用。笔者最先是通过公司的云客服系统接触的Solr,几百万的留言秒秒钟就查询并高亮显示,不同的广告员还可以只...
  • SolrJ的查询

    2019-09-23 22:32:18
    2. solr直接操作索引库和文档库, 我们的业务系统中可以使用solrJ(solr的客户端,就是一堆jar包)来调用solr服务端, 让solr服务端操作文档库和索引库,完成正删改查的任务,将结果返回给solrJ客户端,...
  • solrj排序

    2016-10-10 17:39:57
    solrj排序SolrQuery params = new SolrQuery(); params.setQuery("*:*"); //这是第一维度的排序 params.setSort(fieldName1, ORDER.desc); //这是第二维度的排序 params.addSort(fieldName2, ORDER.desc);当第一维度...
  • solrj for solr5.3.1(solrj最新版本API)

    千次阅读 2015-12-01 23:10:57
    solrj for solr5.3.1(solrj最新版本API)以及相关测试demo
1 2 3 4 5 ... 20
收藏数 6,734
精华内容 2,693
关键字:

solrj