在上一篇中已经讲解了如何使用docker安装Solr,本篇讲解一下在SpringBoot项目中如何简单集成solr。在你现有搭建的SpringBoot项目基础上增加如下的pom依赖:
<dependency>
<groupId>com.github.magese</groupId>
<artifactId>ik-analyzer</artifactId>
<version>8.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
<version>2.4.11</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
HttpSolrClient注入
@Bean
public HttpSolrClient solrClient() {
CredentialsProvider provider = new BasicCredentialsProvider();
//url为:http://ip:6016/solr/核心库名称,username和password:是solr配置的账号密码
final URI uri = URI.create(this.uri);
provider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()),
new UsernamePasswordCredentials(username, password));
HttpClientBuilder builder = HttpClientBuilder.create();
// 指定拦截器,用于设置认证信息
builder.addInterceptorFirst(new SolrAuthInterceptor());
builder.setDefaultCredentialsProvider(provider);
CloseableHttpClient httpClient = builder.build();
return new HttpSolrClient.Builder(this.uri).withHttpClient(httpClient).build();
}
ps:这里的核心库名称建立可以参考我的上一篇安装文章了解,也可以自己在solr的web界面建立,可以把solr的核心库理解为mysql中的表,只是里面可以存储非结构化的数据 。
web界面配置core:
拦截器配置类
public class SolrAuthInterceptor implements HttpRequestInterceptor {
@Override
public void process(final HttpRequest request, final HttpContext context) {
AuthState authState = (AuthState) context.getAttribute(HttpClientContext.TARGET_AUTH_STATE);
if (authState.getAuthScheme() == null) {
CredentialsProvider provider =
(CredentialsProvider) context.getAttribute(HttpClientContext.CREDS_PROVIDER);
HttpHost httpHost = (HttpHost) context.getAttribute(HttpCoreContext.HTTP_TARGET_HOST);
AuthScope scope = new AuthScope(httpHost.getHostName(), httpHost.getPort());
Credentials credentials = provider.getCredentials(scope);
authState.update(new BasicScheme(), credentials);
}
}
}
到了这里我们的solr集成配置就完成了,下面可以使用solr进行crud了。
1.添加
@RequiredArgsConstructor
public class SolrTest {
private final HttpSolrClient solrClient;
public void testSolr() {
SolrInputDocument inputDocument = new SolrInputDocument();
//1.向文档中添加域以及对应的值
inputDocument.addField("id", 1);
inputDocument.addField("name", "名称");
inputDocument.addField("content", "内容");
//2.将文档写入索引库中
solrClient.add(inputDocument);
//3.提交
solrClient.commit();
}
}
2.查询
//2.创建查询语句
SolrQuery query = new SolrQuery();
//3.设置查询条件
query.set("q", "id:"+"82991");
//4.执行查询
QueryResponse queryResponse = solrClient.query(query);
//5.取文档列表
SolrDocumentList documentList = queryResponse.getResults();
for (SolrDocument solrDocument : documentList) {
//打印map对象,业务处理
System.out.println(JSONUtil.toJsonStr(solrDocument));
}
3.删除
//1.根据id删除索引
solrClient.deleteById("1");
//2.根据条件删除,此操作设置的为全部删除,也可以自定义条件删除,查询语法与web界面查询一样
solrClient.deleteByQuery("*:*");
solrClient.commit();