Nội dung
- 1 Thêm thư viện của trình xử lý nhập dữ liệu
- 2 Thêm thư viện driver cơ sở dữ liệu
- 3 Cấu hình file solrconfig.xml
- 3.1 Cấu thẻ lib - thêm driver jar
- 3.2 Cấu thẻ requestHandler - thêm DIH
- 3.3 Tạo file data-config.xml trong thư mục conf
- 4 Khởi động lại Tomcat và kiểm tra cấu hình DIH
- 5 Thực hiện nhập dữ liệu
- Tuyên bố bản quyền
1 Thêm thư viện của trình xử lý nhập dữ liệu
Sao chép file solr-dataimporthandler-4.10.4.jar từ thư mục dist sau khi giải nén Solr:
Dán vào thư mục contrib/dataimporthandler/lib, thư mục lib cần được tạo thủ công:
2 Thêm thư viện driver cơ sở dữ liệu
Sao chép file jar tương ứng của máy chủ cơ sở dữ liệu bạn đang sử dụng:
Dán vào thư mục contrib/db/lib, thư mục db/lib cần được tạo thủ công:
Lưu ý: Ở đây sử dụng MySQL phiên bản 5.7.20, do đó nhập file jar phiên bản 5.1.44 — các file jar phiên bản thấp hơn có thể gây ra một số lỗi không thể dự đoán trước.
3 Cấu hình file solrconfig.xml
Tìm file solrconfig.xml trong SolrCore (tức là collection1).
3.1 Cấu thẻ lib - thêm driver jar
<!-- Cấu hình thêm thư viện nhập dữ liệu, driver cơ sở dữ liệu -->
<lib dir="${solr.install.dir:../..}/contrib/dataimporthandler/lib" regex=".*\.jar"/>
<lib dir="${solr.install.dir:../..}/contrib/db/lib" regex=".*\.jar"/>
3.2 Cấu thẻ requestHandler - thêm DIH
Solr hỗ trợ hai phương thức nhập dữ liệu: Nhập toàn bộ (full-import) và Nhập gia tăng (delta-import):
① Nhập toàn bộ: Là việc nhập tất cả dữ liệu trong một lần duy nhất; ② Nhập gia tăng: Là việc chỉ xử lý khi dữ liệu trong cơ sở dữ liệu có cập nhật.
Để sử dụng dataimport, bạn cần thêm thông tin cấu hình DIH vào solrconfig.xml:
<!-- Thêm trình xử lý yêu cầu nhập dữ liệu -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
3.3 Tạo file data-config.xml trong thư mục conf
(1) File data-config.xml:
Lưu ý: Ở đây thuộc tính column của field tương ứng với trường trong bảng cơ sở dữ liệu, trong khi giá trị thuộc tính name phải khớp với giá trị thuộc tính name của field được cấu hình mới trong file schema.xml, nếu không sẽ không thể phân tích.
Cấu hình thông tin bảng MySQL ở đây nhất quán với dữ liệu MySQL được sử dụng trong bài viết trước về cấu hình trình tách từ IK trong Solr, file SQL cụ thể có thể được tải xuống từ GitHub của tôi, file là Dữ liệu bảng sử dụng trình tách từ IK của Solr.sql.
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<!-- Cấu hình nguồn dữ liệu -->
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/solr?useSSL=true"
user="ten_dang_nhap_cua_ban"
password="mat_khau_cua_ban"/>
<document>
<!-- Cấu hình kết quả thực thi sql, tương ứng với miền kinh doanh sản phẩm -->
<entity name="san_pham" pk="ma_san_pham"
query="SELECT ma_san_pham, ten_san_pham, danh_muc, ten_danh_muc, gia, mo_ta, hinh_anh
FROM san_pham">
<field column="ma_san_pham" name="id"/>
<field column="ten_san_pham" name="ten_sp"/>
<field column="danh_muc" name="danh_muc_sp"/>
<field column="ten_danh_muc" name="ten_danh_muc_sp"/>
<field column="gia" name="gia_sp"/>
<field column="mo_ta" name="mo_ta_sp"/>
<field column="hinh_anh" name="hinh_anh_sp"/>
</entity>
</document>
</dataConfig>
(2) Tham số giải thích:
①
dataSource: Định nghĩa vị trí của dữ liệu, đối với cơ sở dữ liệu, đó là DSN (Tên nguồn dữ liệu, tức là tên máy chủ cơ sở dữ liệu, cổng và tên cơ sở dữ liệu, người dùng, mật khẩu); đối với nguồn dữ liệu HTTP, đó là URL cơ bản. ②entity: Một thực thể sẽ được xử lý để tạo ra một bộ tài liệu chứa nhiều trường, sau đó được gửi đến Solr để lập chỉ mục. Đối với nguồn dữ liệu RDBMS, một thực thể là một chế độ xem hoặc bảng, có thể được xử lý bởi một hoặc nhiều câu lệnh SQL để tạo ra một chuỗi các hàng (tài liệu) có một hoặc nhiều cột (trường). ③processor: Một trình xử lý thực thể sẽ hoàn thành toàn bộ công việc trích xuất nội dung từ nguồn dữ liệu, chuyển đổi và thêm vào chỉ mục. Bạn có thể mở rộng hoặc thay thế trình xử lý mặc định được cung cấp bằng trình xử lý thực thể tùy chỉnh. ④transformer: Mỗi bộ trường lấy từ thực thể đều có thể được chuyển đổi, quá trình này có thể sửa đổi trường, tạo trường mới hoặc tạo ra nhiều hàng từ một hàng duy nhất. Bạn có thể tùy chỉnh bộ chuyển đổi thông qua giao diện chung.
(3) Cách sử dụng cấu hình khác:
<entity name="san_pham" pk="ma_san_pham"
query="SELECT * FROM san_pham"
deltaImportQuery="SELECT * FROM san_pham where ma_san_pham='${dih.delta.id}'"
deltaQuery="SELECT ma_san_pham FROM san_pham where thoi_cap_nhat > '${dih.last_index_time}'" >
<field />
<!-- ...... -->
</entity>
①
pkđại diện cho khóa chính; ②query: Được sử dụng trong chế độ nhập toàn bộ (full-import); ③deltaImportQueryvàdeltaQuery: Được sử dụng trong chế độ nhập gia tăng (delta-import):a) Cơ sở dữ liệu cần có một trường thời gian có kiểu
timestamp, tương tự nhưthoi_cap_nhat; b) Khi thực hiện nhập dữ liệu, Solr sẽ tự động tạo fileconf/dataimport.propertiesđể ghi lại thời gian nhập lần cuối; c) Khi thực hiệndelta-import, đầu tiên dựa vàodeltaQueryđể tra cứu id của dữ liệu cần nhập, sau đó thực hiệndeltaImportQuerythông qua id, cuối cùng thực hiện nhập dữ liệu gia tăng.
(4) Thay đổi trong phiên bản Solr 5.x:
① Phiên bản Solr 5.x trở về sau sử dụng
${dih.delta.id}để lấy khóa chính của dữ liệu cần nhập gia tăng, phiên bản trước sử dụng${dataimporter.delta.ID}; ② Sử dụng${dih.last_index_time}để lấy giá trị thuộc tínhlast_index_timetrong filedataimport.properties, phiên bản trước sử dụng${dataimporter.last_index_time}.
4 Khởi động lại Tomcat và kiểm tra cấu hình DIH
Khởi động lại Tomcat, trong thanh menu chọn [Dataimport] để kiểm tra Entity đã được cấu hình có hiệu quả hay không. Bạn cũng có thể kiểm tra file cấu hình qua menu [Files].
5 Thực hiện nhập dữ liệu
(1) Nhập dữ liệu qua giao diện quản lý Solr Dataimport:
Lưu ý: Do tính không ổn định của giao diện quản lý Solr, trạng thái hiển thị chỉ mục có thể biến mất, bạn có thể kiểm tra mức độ dao động của JVM-Memory trong Dashboard để xác định xem có đang ở trạng thái lập chỉ mục hay không.
(2) Bạn cũng có thể nhập dữ liệu thông qua yêu cầu HTTP, định dạng URL của yêu cầu HTTP là:
http://ip:port/[thư-mục-web]/TênCore/dataimport?command=lệnh[&tham_số], trong đó lệnh command xem ví dụ dưới đây, tham số params có các lựa chọn sau:
| **Tham số** | Mô tả |
|---|---|
| **clean** | Mặc định là true, có nghĩa là xóa chỉ mục cũ trước khi tạo chỉ mục mới (cẩn thận khi sử dụng) |
| **commit** | Mặc định là true, có nghĩa là có commit sau khi hoàn thành thao tác |
| **debug** | Mặc định là false, có nghĩa là có chạy ở chế độ Debug hay không. Commit mặc định trong chế độ này là false. |
| **entity** | Dùng entity đã chỉ định thao tác, chỉ có thể chỉ định name của thẻ cấp đầu tiên trong thẻ của file cấu hình DIH, nếu truyền giá trị rỗng thì thực hiện thao tác trên tất cả entity. |
| **optimize** | Mặc định là true, có nghĩa là có tối ưu hóa (optimize) chỉ mục sau khi thao tác. |
(3) Ví dụ:
① Nếu thực hiện nhập toàn bộ, xóa chỉ mục trước khi nhập, commit kết quả sau khi nhập, thì gửi yêu cầu URL như sau: http://ip:port/[thư-mục-web]/TênCore/dataimport?command=full-import&clean=true&commit=true
② Nếu thực hiện nhập gia tăng, không xóa chỉ mục trước khi nhập, commit kết quả sau khi nhập, thì gửi yêu cầu URL như sau: http://ip:port/[thư-mục-web]/TênCore/dataimport?command=delta-import&clean=false&commit=true