java 整合solr 5.5 实现增删改查(附带solr安装、启动、修改配置文件步骤)
solr安装
去官网直接下载即可
解压后是一个这样的目录结构
第一步:
创建索引库
点进server/solr文件夹中添加new_core文件夹
点进server\solr\configsets\sample_techproducts_configs 文件夹下conf目录放到new_core中
点进bin目录进行cmd,运行solr start,-p带指定端口启动 stop同理
第二步:
访问http://localhost:8983会显示这个页面就代表启动成功了
点core Admin 进行新增索引库,name为你给该索引起的名字,instanceDir为我们创建的文件夹名称,其他不变即可
创建完成可以看到我们的索引库的一些基本信息
修改solr配置文件
对应索引库目录下的config文件夹中的managed-schema文件中修改,修改配置文件后需要重启solr服务 solr stop -p 8983
<!-- 分词器配置 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
</analyzer>
</fieldType>
<!-- 映射字段配置 -->
<field name="field_name" type="string" indexed="true" stored="true" />
<field name="field_age" type="int" indexed="true" stored="true" />
<!-- 分词映射字段配置 相当于在分词下方的多个字段中搜索,有符合也会返回数据-->
<field name="ik_a" type="text_ik" indexed="true" stored="false" multiValued="true" />
<copyField source="field_name" dest="ik_a"/>
<copyField source="field_age" dest="ik_a"/>
重启后点击到我们的索引库下面进行query,发现都是空数据
spring boot整合solr
pom
<properties>
<druid.version>1.1.5</druid.version>
<mysql-connector-java.version>5.1.48</mysql-connector-java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>
<t-io.version>3.7.0.v20201010-RELEASE</t-io.version>
<lombok.version>1.18.10</lombok.version>
<mybatis-plus.version>2.3</mybatis-plus.version>
<mybatis.version>2.1.3</mybatis.version>
<hutool.version>5.3.3</hutool.version>
<pool2.version>2.9.0</pool2.version>
<swagger.version>2.9.2</swagger.version>
<jackson.version>2.11.3</jackson.version>
<spring-boot.version>2.3.5.RELEASE</spring-boot.version>
<spring-activiti.version>7.1.0.M6</spring-activiti.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>${mysql-connector-java.version}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.yml文件,solr后面跟着就是我们前面创建的索引库name
server:
port: 21110
spring:
data:
solr:
host: http://127.0.0.1:8983/solr/new_core
repositories:
enabled: true
索引新增,编辑和新增同理,id唯一,相同则编辑,不相同添加
@Autowired
private SolrClient solrClient;
@Test
public void addSolr() throws IOException, SolrServerException {
//默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
// HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
SolrInputDocument document = new SolrInputDocument();
document.addField("id", UUID.randomUUID().toString());//solr中id无需配置,为必传项,没有id则报错
document.addField("field_name","李四");
document.addField("field_age",15);
solrClient.add(document);
solrClient.commit();
}
索引删除
@Test
public void deleteSolr() throws IOException, SolrServerException {
//默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
// HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
solrClient.deleteById("3ac4be61-e81c-44dd-b474-a1933a3f14b2");
List<String> list = new ArrayList<>();
Collections.addAll(list,"8bce02e3-90f2-4bf7-91f2-d580c8f568c5","11b80c0a-ab20-4cb9-84ae-783eff22245b");
solrClient.deleteById(list);//批量删除
solrClient.deleteByQuery("field_name:李四");//根据条件删除
solrClient.commit();
}
索引查询(重点)
普通查询 q查询
@Test
public void selectSolr1() throws IOException, SolrServerException {
//默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
// HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
Map<String, String> map = new HashMap<>();
map.put("q","field_name:李四");//普通查询
map.put("wt","json");
map.put("rows","100");
SolrParams params = new MapSolrParams(map);
QueryResponse response = solrClient.query(params);
SolrDocumentList results = response.getResults();
for (SolrDocument result : results) {
System.out.println(result);
}
}
过滤查询 fq
@Test
public void selectSolr2() throws IOException, SolrServerException {
//默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
// HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
Map<String, String> map = new HashMap<>();
map.put("q","*:*");//fq也是在q的基础上查询的,所以q查询需要先符合条件,我们默认*:*
// map.put("fq","field_name:李四 OR field_name:王五 ");//或、查询name值等于李四或者王五的数据
// map.put("fq","field_age:[13 TO 16]");//n到n,查询age值从13到16的数据
map.put("fq","field_name:李四 AND field_age:[13 TO 16]");//拼接起来就是查询名字为李四,年龄在13-16区间
map.put("wt","json");
map.put("rows","100");
SolrParams params = new MapSolrParams(map);
QueryResponse response = solrClient.query(params);
SolrDocumentList results = response.getResults();
for (SolrDocument result : results) {
System.out.println(result);
}
}
搜索中常用的参数
IK 分词器配置
去maven中央仓库下载ik-analyzer-solr对应版本的jar即可,放入\solr-5.5.0\server\solr-webapp\webapp\WEB-INF\lib 下,分词器配置我们在上面已经配好了
IK 分词器查询
其实原理相同,我们分词器的name为ik_a,下面有两个分词字段,我们在查询ik_a的时候,分词字段中只要有符合的,就会查询出来,一般适用于主页当中的搜索引擎
@Test
public void selectIKSolr() throws IOException, SolrServerException {
//默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
// HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
Map<String, String> map = new HashMap<>();
map.put("q","ik_a:(李四 or 18)");//普通查询
map.put("wt","json");
map.put("rows","100");
SolrParams params = new MapSolrParams(map);
QueryResponse response = solrClient.query(params);
SolrDocumentList results = response.getResults();
for (SolrDocument result : results) {
System.out.println(result);
}
}
运行结果,可以看到李四和18都能查出来了
本篇到此也就差不多了,对你有帮助请点点赞,工具简单,怎样灵活的运用在项目中才是工具最大的用处。