SolrJ là thư viện client Java chuyên dụng để tương tác với dịch vụ Solr, cung cấp các phương thức xử lý chỉ mục và truy vấn hiệu quả.
Để triển khai, cần cấu hình dự án Maven với các phụ thuộc sau:
<dependencies>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.11.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
Thao tác chỉ mục cơ bản
Thực hiện thêm/sửa chỉ mục thông qua ID duy nhất:
public void addOrUpdateDocument() throws Exception {
SolrClient client = new HttpSolrClient.Builder("http://localhost:8983/solr").build();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("doc_id", "item_1001");
doc.addField("item_title", "Cà phê nguyên chất");
client.add(doc);
client.commit();
}
Xóa chỉ mục
Xóa theo ID:
public void deleteByDocId() throws Exception {
SolrClient client = new HttpSolrClient.Builder("http://localhost:8983/solr").build();
client.deleteById("item_1001");
client.commit();
}
Xóa theo điều kiện:
public void deleteByCondition() throws Exception {
SolrClient client = new HttpSolrClient.Builder("http://localhost:8983/solr").build();
client.deleteByQuery("item_category:đồ uống");
client.commit();
}
Truy vấn nâng cao
Thiết lập truy vấn với các tùy chọn:
public void advancedQuery() throws Exception {
SolrClient client = new HttpSolrClient.Builder("http://localhost:8983/solr").build();
SolrQuery query = new SolrQuery();
query.setQuery("cà phê");
query.setFilterQuery("price:[10000 TO *]");
query.setSort("price", ORDER.asc);
query.setStart(0);
query.setRows(20);
query.setFields("doc_id", "item_title", "price");
query.setHighlight(true);
query.addHighlightField("item_title");
query.setHighlightSimplePre("<mark>");
query.setHighlightSimplePost("</mark>");
QueryResponse response = client.query(query);
SolrDocumentList results = response.getResults();
Map<String, Map<String, List<String>>> highlights = response.getHighlighting();
for (SolrDocument doc : results) {
String highlighted = highlights.get(doc.get("doc_id")).get("item_title").get(0);
System.out.println("Sản phẩm: " + highlighted);
}
}
Thống kê phân mảnh
Hiển thị dữ liệu phân mảnh theo danh mục:
query.setFacet(true);
query.addFacetField("item_category");
// Xử lý kết quả
List<FacetField> facets = response.getFacetFields();
for (FacetField facet : facets) {
System.out.println("Danh mục: " + facet.getName() + " - Số lượng: " + facet.getValueCount());
}