使用solrj对solr索引库curd

用solrj 增删查改 参考教程

  • 找啦无数篇教程 人TM都疯啦
  • 1.参考教程
  • 2.用上面的参考教程完成solr的core的创建 需要注意的是:1.新建field在conf的data.xml 然后在managed-schema.xml引入 2.添加field可以在solr图形化界面添加

  • 3.core 建立成功 选中core dataimprot 导入数据库表数据 query查询 看有没有

  • 4.以上,为solrj的使用打下基础 运行solr为后面做准备 地址:http://localhost:8983/solr/test

  • 5.自带分词器(在analysis里面,稍后介绍ik分词器)
  • 6.新建maven项目 导入solrj等jar包 使用slorj 对solr服务器导入的数据库表数据进行增删查改
  • 6.1 pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.millery.spring_solr</groupId>
    <artifactId>spring-solr</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>


    <!-- 添加依赖 -->
    <dependencies>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>

    <dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>5.3.1</version>
    </dependency>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.7</version>
    </dependency>
    <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
    </dependency>

    </dependencies>
    </project>
  • 6.2 solrtest.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    package com.fangjun.test;

    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 org.junit.Test;

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

    public class solrtest {
    private static final String url="http://localhost:8983/solr/test";
    /*
    * 测试向索引库中添加文档
    */
    @Test
    public void testSave() throws Exception {
    //1.创建连接对象
    HttpSolrServer solrServer = new HttpSolrServer(url);
    //2.创建一个文档对象
    SolrInputDocument inputDocument = new SolrInputDocument();
    //向文档中添加域以及对应的值,注意:所有的域必须在schema.xml中定义过,前面已经给出过我定义的域。
    inputDocument.addField("id", "1");
    inputDocument.addField("name", "sansung爆炸牌手机");

    //3.将文档写入索引库中
    solrServer.add(inputDocument);
    //提交
    solrServer.commit();
    }

    /*
    * 测试修改索引库中已存在的文档
    */
    @Test
    public void testUpdate() throws Exception {
    //1.创建连接对象
    HttpSolrServer solrServer = new HttpSolrServer(url);
    //2.创建一个文档对象
    SolrInputDocument inputDocument = new SolrInputDocument();
    inputDocument.addField("id", "60");
    //修改id为1的商品的信息(如果该商品不存在其实就是添加了)
    inputDocument.addField("name", "vivo手机hahaha");

    //3.将文档写入索引库中
    solrServer.add(inputDocument);
    //提交
    solrServer.commit();
    }

    /*
    * 测试删除文档:根据id删除文档 *
    */
    @Test
    public void testDeleteById() throws Exception{
    HttpSolrServer solrServer = new HttpSolrServer(url);
    //删除文档
    solrServer.deleteById("1");
    //提交
    solrServer.commit();
    }

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

    /*
    * 简单查询:查询单个商品信息
    */
    @Test
    public void testSimpleQ() throws Exception{
    //1.创建连接
    HttpSolrServer solrServer = new HttpSolrServer(url);
    //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")+" ");
    }
    }


    /*
    * 测试复杂查询:取高亮
    */
    @Test
    public void testHighLighting() throws Exception{
    //1、创建连接
    HttpSolrServer solrServer = new HttpSolrServer(url);
    //2、创建查询语句
    SolrQuery query = new SolrQuery();
    //3、设置查询条件
    query.set("q", "夏普");//设置查询关键字
    query.setSort("id", SolrQuery.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();
    }

    }


    }

6.3 log4j.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
### set log levels ###
log4j.rootLogger = DEBUG,Console,File

### 输出到控制台 ###
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= %d{ABSOLUTE} %5p %c{1}:%L - %m%n


### 输出到日志文件 ###
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=/home/demo/Documents/idea_project/solr/src/main/resources/app.log
log4j.appender.File.DatePattern=_yyyyMMdd'.log'
log4j.appender.File.MaxFileSize=10MB
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

总结:

  • 1.HttpSolrServer solrServer = new HttpSolrServer(url);//创建链接对象
  • 2.SolrInputDocument inputDocument = new SolrInputDocument();//创建文档对象
  • 3.inputDocument.addField(“id”, “1”);//添加字段信息 这里字段要在服务器定义 有两种查看方法(配置文件、游览器)
    1. solrServer.add(inputDocument);//将文档写入索引库中 还有solrServer.deleteById(“1”);solrServer.deleteByQuery(“item_title:vivo手机hahaha”);等
    1. solrServer.commit();//提交