Solr6.6.2之SolrJ

SolrJ就是Solr服务器的java客户端。

这里写图片描述

环境准备

1.JDK1.8
2.SolrJ6.6.2
3.Eclipse
4.Tomcat8

项目结构

这里写图片描述
所需jar包在/solr-6.6.2/dist/solr-6.6.2/dist/solrj-lib以及/solr-6.6.2/server/lib/ext


使用solrj完成索引维护

1.添加/修改索引

在solr中,索引库中都会存在一个唯一键,如果一个Document的id存在,则执行修改操作,如果不存在,则执行添加操作。

@Test
public void insertAndUpdateIndex() throws Exception {
    // 创建HttpSolrClient
    HttpSolrClient server = new HttpSolrClient.Builder("http://localhost:8080/solr/new_core").build();
    // 创建Document对象
    SolrInputDocument document = new SolrInputDocument();
    document.addField("id", "id007");
    document.addField("name", "张育嘉");
    // 将Document对象添加到索引库
    server.add(document);
    // 提交
    server.commit();
}

2.删除索引

@Test
public void deleteIndex() throws Exception {
    // 创建HttpSolrClient
    HttpSolrClient server = new HttpSolrClient.Builder("http://localhost:8080/solr/new_core").build();
    // 根据ID删除索引
    server.deleteById("id007");
    // 根据条件删除索引
    //server.deleteByQuery("id:id007");
    // 全部删除
    //server.deleteByQuery("*:*");
    // 提交
    server.commit();
}

3.查询索引

简单查询

@Test
public void simpleSearch() throws Exception {
    // 创建HttpSolrClient
    HttpSolrClient server = new HttpSolrClient.Builder("http://localhost:8080/solr/new_core").build();
    // 创建SolrQuery
    SolrQuery query = new SolrQuery();
    // 输入查询条件
    query.setQuery("product_name:小黄人");
    // 执行查询并返回结果
    QueryResponse response = server.query(query);
    // 获取所有匹配结果
    SolrDocumentList list = response.getResults();
    // 获取匹配结果总数
    long count = list.getNumFound();
    System.out.println("查询结果总数:"+count);

    for (SolrDocument solrDocument : list) {
        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"));
        System.out.println(solrDocument.get("product_picture"));
        System.out.println("=================================");
    }
}

复杂查询

@Test
public void multiSearch() throws Exception {
    // 创建HttpSolrClient
    HttpSolrClient server = new HttpSolrClient.Builder("http://localhost:8080/solr/new_core").build();
    // 创建SolrQuery
    SolrQuery query = new SolrQuery();

    // 输入查询条件
    query.setQuery("product_name:小黄人 AND product_catalog_name:幽默杂货 OR product_description:商品材质");

    // 设置过滤条件
    query.setFilterQueries("product_price:[1 TO *]");

    // 排序
    query.setSort("product_price", ORDER.asc);

    // 分页
    query.setStart(0);
    query.setRows(10);

    // 设置需要显示的Field的集合
    query.setFields("id,product_name,product_price,product_catalog,product_picture");

    // 设置默认域
    query.set("df", "product_keywords");

    // 设置高亮信息
    query.setHighlight(true);
    query.addHighlightField("product_name");
    query.setHighlightSimplePre("<span color='red'>");
    query.setHighlightSimplePost("</span>");

    // 查询并返回结果
    QueryResponse response = server.query(query);
    // 获取匹配的所有结果
    SolrDocumentList list = response.getResults();
    // 匹配结果总数
    long count = list.getNumFound();
    System.out.println("匹配结果总数:" + count);

    // 获取高亮信息
    Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();

    // 输出结果
    for (SolrDocument solrDocument : list) {

        System.out.println(solrDocument.get("id"));

        List<String> list2 = highlighting.get(solrDocument.get("id")).get("product_name");

        if(list2 != null) {
            System.out.println("高亮显示的商品名称:"+list2.get(0));
        }else {
            System.out.println(solrDocument.get("product_name"));
        }

        System.out.println(solrDocument.get("product_name"));
        System.out.println(solrDocument.get("product_price"));
        System.out.println(solrDocument.get("product_catalog"));
        System.out.println(solrDocument.get("product_picture"));
        System.out.println("========================================");
    }
}

Solr的查询语法

1. 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 - 排序

格式:product_price asc,id desc
这里写图片描述

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

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

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

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

这里写图片描述

7. df - 指定一个默认的搜索Field

这里写图片描述

8. wt - (writer type)指定输出格式,可以有 xml, json, php, csv, 后面 solr 1.3增加的,默认没有打开。

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

这里写图片描述

扫描二维码关注公众号,回复: 1730666 查看本文章

Solr的Web端

这里写图片描述

上一篇:《Solr6.6.2之基本使用》

猜你喜欢

转载自blog.csdn.net/code_shadow/article/details/80735171