分享知识-快乐自己:java代码 操作 solr

POM 文件:

<!-- solr客户端 -->
<dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.10.3</version>
</dependency> 

JAVA 代码:

package com.gdbd.solrj;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
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.apache.solr.common.SolrInputDocument;

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

/**
 * @Description: SolrJ 添加数据测试类
 * @Author: DGBD
 * @CreateDate: 2018/12/31 15:57
 * @UpdateUser: yc
 * @UpdateDate: 2018/12/31 15:57
 * @UpdateRemark: 修改内容
 * @博客地址: https://www.cnblogs.com/mlq2017/
 * @Version: 1.0
 */
public class TestSolrJ {

    public static void main(String[] args) {
        try {
            do {
                System.out.println("....请选择你的操作....");
                System.out.println("1):向 solr 索引库添加数据");
                System.out.println("2):查询 solr 索引库数据");
                System.out.println("3):修改 solr 索引库数据");
                System.out.println("4):删除 solr 索引库数据");
                System.out.println("5):根据 查询 删除 solr 索引库数据");
                System.out.println("请输入....");
                Scanner input = new Scanner(System.in);
                int num = input.nextInt();
                switch (num) {
                    case 1:
                        testAddDocument();
                        break;
                    case 2:
                        testselDocument();
                        break;
                    case 3:
                        break;
                    case 4:
                        testdelDocument();
                        break;
                    case 5:
                        testdelQueryDocument();
                        break;
                }
            } while (true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /***
     * 向 solr 索引库添加数据
     * @throws Exception
     */
    public static void testAddDocument() throws Exception {
        //01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
        SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
        //02、创建一个文档对象SolrInputDocument
        SolrInputDocument document = new SolrInputDocument();
        //03、向文档中添加域,必须有 id 域,域的名称必须在 schema.xml
        document.addField("id", "123");
        document.addField("item_title", "测试商品标题2");
        document.addField("item_sell_point", "测试商品买点2");
        document.addField("item_price", 1000);
        document.addField("item_image", "测试商品图片2");
        document.addField("item_category_name", "测试商品分类名称2");
        document.addField("item_desc", "测试商品描述2");
        SolrInputDocument document1 = new SolrInputDocument();
        //03、向文档中添加域,必须有 id 域,域的名称必须在 schema.xml
        document1.addField("id", "test001");
        document1.addField("item_title", "测试商品标题1");
        document1.addField("item_sell_point", "测试商品买点1");
        document1.addField("item_price", 1000);
        document1.addField("item_image", "测试商品图片1");
        document1.addField("item_category_name", "测试商品分类名称1");
        document1.addField("item_desc", "测试商品描述1");
        //04、把文档对象写入索引库
        solrServer.add(document);
        solrServer.add(document1);
        solrServer.commit();
        System.out.println("成功插入...............................");
    }

    /***
     * 查询 solr 索引库数据
     *
     * 提示:查询所有(*:*)不能设置高亮显示
     *       分页不设置默认为(0-10)
     *       如果查询条件上没有指定在哪一个 业务域上搜索 则在默认搜索域中搜索
     *
     * @throws Exception
     */
    public static void testselDocument() throws Exception {
        //01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
        SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
        //02、创建一个 solrQuery 查询对象
        SolrQuery solrQuery = new SolrQuery();
        //设置查询条件:过滤条件、分页条件...
        solrQuery.set("q", "手机");
        //solrQuery.setQuery("*:*");

        //分页条件(从第 30 条开始查询,每页显示10 条)
        solrQuery.set("start", 0);//solrQuery.setStart();
        solrQuery.set("rows", 5);//solrQuery.setRows();

        //默认搜索域
        solrQuery.set("df", "item_keywords");

        //设置高亮
        solrQuery.set("hl", true);//solrQuery.setHighlight(true);

        //设置高亮显示域(对哪一个域进行 高亮显示:这里设置标题域为高亮)
        solrQuery.set("hl.fl", "item_title");//solrQuery.addHighlightField("item_title");

        //高亮显示前缀后缀
        solrQuery.set("hl.simple.pre", "<em>");//solrQuery.setHighlightSimplePre("<em>");
        solrQuery.set("hl.simple.post", "</em>");//solrQuery.setHighlightSimplePost("</em>");

        //03、执行查询(得到一个 Response 对象)
        QueryResponse response = solrServer.query(solrQuery);
        //04、取查询结果
        SolrDocumentList results = response.getResults();
        //05、取查询总记录数
        System.out.println("取查询总记录数:>>>>" + results.getNumFound());
        for (SolrDocument item : results) {
            System.out.println(item.get("id"));
            //06、取高亮显示
            Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
            List<String> list = highlighting.get(item.get("id")).get("item_title");
            String title = "";
            if (list != null && list.size() > 0) {
                title = list.get(0);//获取高亮的信息
            } else {
                title = (String) item.get("item_title");//没有高亮信息 则显示默认的
            }
            System.out.println(title);
            System.out.println(item.get("item_sell_point"));
            System.out.println(item.get("item_price"));
            System.out.println(item.get("item_image"));
            System.out.println(item.get("item_category_name"));
            System.out.println(item.get("item_desc"));
            System.out.println("===========================================");
        }


    }

    /***
     * 修改 solr 索引库数据
     * @throws Exception
     */
    public static void testmodfyDocument() throws Exception {

    }

    /***
     * 根据 Id 删除 solr 索引库数据
     * @throws Exception
     */
    public static void testdelDocument() throws Exception {
        //01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
        SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
        //根据 Id 删除 solr 中的数据
        solrServer.deleteById("test001");
        solrServer.commit();
    }

    /***
     * 根据 查询 删除 solr 索引库数据
     * @throws Exception
     */
    public static void testdelQueryDocument() throws Exception {
        //01、创建一个 SolrServer 对象。创建一个 HTTPSolrServer对象。需要指定 solr 服务的 url
        SolrServer solrServer = new HttpSolrServer("http://192.168.31.206:8080/solr/collection1");
        //根据 Id 删除 solr 中的数据
        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
}

猜你喜欢

转载自www.cnblogs.com/mlq2017/p/10204824.html