一、准备
在 solr/conf/schema.xml 配置文件中定义相关的字段。
<!--
name:该字段的名称。
type:fieldType 字段对应的名称。
"text_ik" 是我自定义的一个字段类型,并配置了中文分词器。
-->
<field name="userName" type="text_ik" indexed="true" stored="true" multiValued="true" />
<field name="merchant" type="text_ik" indexed="true" stored="true" />
<field name="city" type="text_ik" indexed="true" stored="true" />
<field name="province" type="text_ik" indexed="true" stored="true" />
新建 Maven 项目,在pom.xml中添加对应的依赖:
<!-- 这里使用 7.7.2 的版本 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.7.2</version>
</dependency>
<!-- 添加 Junit 测试的依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
二、测试
2.1创建实体类
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Product {
@Field
private String id;
@Field("name")
private String productName;
@Field
private String merchant;
@Field
private String province;
@Field
private Float price;
}
2.2编写java代码
2.2.1 添加与修改
增删改,Solr 中没有提供专门的修改方法,会根据 id 在文档中查找,如果没有找到就是添加,找到了就会覆盖原来的数据,即修改。
编写 Java 代码:
@Test
public void testAddProductDocument() throws IOException, SolrServerException {
//创建一个Solr对象和Solr服务端的连接
HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/new_core2").build();
//实例化Product对象
Product product = new Product().builder()
.id("66")
.merchant("优衣库官方旗舰店")
.price((float) 1200.00)
.productName("男士穿上衬衫非常的帅")
.province("北京昌平")
.build();
UpdateResponse updateResponse = solrClient.addBean(product);
solrClient.commit();
}
在浏览器端ui端查看:
2.2.2 删除
编写 Java 代码:
@Test
public void testSolrDeleteById() throws IOException, SolrServerException {
//创建一个Solr对象和Solr服务端的连接
HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/new_core2").build();
// 根据 id 删除
// client.deleteById("24");
// 根据查询删除, *:* 表示删除所有
solrClient.deleteByQuery("id:26");
//提交
solrClient.commit();
}
2.2.3 查询
编写 Java 代码:
@Test
public void testQuery() throws IOException, SolrServerException {
//创建一个Solr对象和Solr服务端的连接
HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/new_core2").build();
// 创建查询对象
SolrQuery solrQuery = new SolrQuery();
// 设置默认搜索字段,如果不指定搜索的字段,则从默认字段中搜索
solrQuery.set("q", "name:男衬衫");
// 设置起始的条数,默认是 0
solrQuery.setStart(3);
// 设置查询的条数,默认是 10
solrQuery.setRows(3);
// 设置高亮
solrQuery.setHighlight(true);
// 设置显示高亮的字段
solrQuery.addHighlightField("name");
// 设置高亮字段值的前缀
solrQuery.setHighlightSimplePre("<font color='red'>");
// 设置高亮字段值的后缀
solrQuery.setHighlightSimplePost("</font>");
//设置排序
solrQuery.setSort("price", SolrQuery.ORDER.asc);
// 获得查询结果的响应对象
QueryResponse queryResponse = solrClient.query(solrQuery);
// 获取高亮结果
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<Product> productList = queryResponse.getBeans(Product.class);
//遍历结果集
for (Product product : productList) {
String name = highlighting.get(product.getId()).get("name").get(0);
product.setProductName(name);
System.out.println("high lighting name:"+name);
}
}
查询结果输出: