0. 引言
我們前面學(xué)習(xí)了solr的服務(wù)端基礎(chǔ)操作,實(shí)際項(xiàng)目中我們還需要在客戶端調(diào)用solr,就像調(diào)用數(shù)據(jù)庫(kù)一樣,我們可以基于solrJ
來(lái)實(shí)現(xiàn)對(duì)solr的客戶端操作
1. SolrJ簡(jiǎn)介
SolrJ
是 Solr官方提供的 Java 客戶端庫(kù),主要用于與 Solr 服務(wù)器進(jìn)行交互。內(nèi)部封裝了一組API,可以方便地實(shí)現(xiàn)對(duì)solr服務(wù)端的各類操作。
使用 SolrJ,可以通過(guò)編寫 Java 代碼來(lái)實(shí)現(xiàn)對(duì) Solr 的索引操作,比如增刪改查。同時(shí),SolrJ 還支持多種查詢方式,如簡(jiǎn)單查詢、復(fù)雜查詢、分頁(yè)查詢、聚合查詢等。同時(shí)也包括了對(duì)solr的索引管理、權(quán)限控制等操作
2. 項(xiàng)目引入SolrJ
1、引入jar包:https://central.sonatype.com/artifact/org.apache.solr/solr-solrj/8.2.0
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.2.0</version>
</dependency>
2、首先創(chuàng)建實(shí)體類,還是以我們?cè)谇皫坠?jié)創(chuàng)建的orders
核心為例
注意:這里需要給字段上加上@Field
注解,其值是該字段在solr中的字段名
@Data
public class Orders {
@Field("id")
private Long id;
@Field("order_no")
private String orderNo;
@Field("address")
private String address;
@Field("product_name")
private String productName;
@Field("remarks")
private String remarks;
@Field("status")
private Integer status;
@Field("create_user")
private String createUser;
@Field("create_time")
private Date createTime;
@Field("labels")
private List<String> labels;
}
3、創(chuàng)建一個(gè)配置類SolrProperties
,用戶聲明配置項(xiàng)
@ConfigurationProperties(prefix = "solr")
@Component
@Data
public class SolrProperties {
private String host;
private Integer connectionTimeout;
private Integer socketTimeout;
}
4、配置文件中添加對(duì)應(yīng)的配置項(xiàng)
# solr地址
solr.host=http://192.168.244.41:8983/solr
# 連接超時(shí)
solr.connectionTimeout=10000
# 讀取超時(shí)
solr.socketTimeout=3000
5、創(chuàng)建bean配置類SolrConfig
,用于創(chuàng)建solr連接bean,注意這里我們演示的是單機(jī)版的solr,集群版的需要使用CloudSolrClient
@Configuration
public class SolrConfig {
@Resource
private SolrProperties solrProperties;
@Bean
public HttpSolrClient solrClient(){
return new HttpSolrClient.Builder(solrProperties.getHost())
.withConnectionTimeout(solrProperties.getConnectionTimeout())
.withSocketTimeout(solrProperties.getSocketTimeout())
.build();
}
}
6、創(chuàng)建一個(gè)測(cè)試controller, 用于演示客戶端的操作,因?yàn)槲覀冎耙呀?jīng)配置了通過(guò)dataimport
自動(dòng)同步mysql數(shù)據(jù)到solr。所以solr本身的增刪改,我們這里就不演示了,只要?jiǎng)h除數(shù)據(jù)庫(kù)后會(huì)自動(dòng)同步,主要演示實(shí)現(xiàn)查詢操作
@RestController
@RequestMapping("orders")
@AllArgsConstructor
public class OrdersController {
private final HttpSolrClient solrClient;
@GetMapping("search")
public List<Orders> search(String productName, String address, String remarks, String labels) throws SolrServerException, IOException {
SolrQuery query = new SolrQuery();
if (!StringUtils.isEmpty(productName)) {
query.setQuery("product_name:" + productName);
}
if (!StringUtils.isEmpty(address)) {
query.setQuery("address:" + address);
}
if (!StringUtils.isEmpty(remarks)) {
query.setQuery("remarks:" + remarks);
}
if (!StringUtils.isEmpty(labels)) {
query.setQuery("labels:" + labels);
}
if(StringUtils.isEmpty(query.getQuery())){
query.setQuery("*:*");
}
query.setStart(0);
query.setRows(5);
QueryResponse response = solrClient.query("orders",query);
List<Orders> list = response.getBeans(Orders.class);
return list;
}
}
7、調(diào)用測(cè)試,結(jié)果數(shù)據(jù)正常顯示
8、如果想要實(shí)現(xiàn)更多的操作, 可以在SolrClient
類中看到支持的方法
3. 配置集群
1、配置文件中增加zookeeper集群的地址配置,
solr.zk.host=192.168.244.42:2181,192.168.244.43:2181,192.168.244.44:2181
2、創(chuàng)建配置類,聲明CloudSolrClient
@Configuration
public class SolrConfig {
@Value("${solr.zk.host}")
private String zkHost;
@Bean
public CloudSolrClient cloudSolrClient(){
if(StringUtils.isEmpty(zkHost)){
return null;
}
return new CloudSolrClient.Builder(Arrays.asList(zkHost.split(",")))
.build();
}
}
3、后續(xù)使用cloudSolrClient
bean來(lái)調(diào)用solr即可文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-495898.html
4. 總結(jié)
更多的客戶端操作,還要大家自己去探索,但是直接使用SolrJ
還是感覺有些復(fù)雜,能不能更加簡(jiǎn)易地實(shí)現(xiàn)客戶端操作呢,那就要提到我們的spring-data-solr
了,下一節(jié),我們繼續(xù)學(xué)習(xí)!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-495898.html
到了這里,關(guān)于solr快速上手:整合SolrJ實(shí)現(xiàn)客戶端操作(九)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!