Tổng quan
Elaticsearch là một công cụ tìm kiếm và phân tích toàn văn bản nguồn mở và phân phối thời gian thực. Đây là nền tảng tìm kiếm dựa trên tài liệu với khả năng tìm kiếm nhanh. Nó được tối ưu hóa cho các vấn đề kim tiêm hay thay vì tính nhất quán hoặc nguyên tử.
Elaticserach là một chủ đề rất lớn, vì vậy trong blog này tôi sẽ giữ nó rất đơn giản và ở cấp độ 101. Trong blog này, tôi sẽ đề cập đến cách tải xuống Elaticsearch và thiết lập nó. Ngoài ra, làm thế nào bạn có thể sử dụng mùa xuân Boot và mùa xuân dữ liệu ElasticSearch dự án để tích hợp với Elasticsearch động cơ.
Cách thiết lập Elaticsearch
Phiên bản mới nhất của Elaticsearch là 6.5.x tính đến ngày hôm nay. Tuy nhiên, tôi sẽ chỉ tải xuống phiên bản 2.4.4. Lý do là cho đến nay , dự án nghiên cứu dữ liệu mùa xuân chỉ tương thích với phiên bản 2.4.4. Nếu bạn muốn biết thêm chi tiết về khả năng tương thích, vui lòng kiểm tra liên kết này: Spring-Data-Elaticsearch --- Spring-Boot --- version-matrix .
Nếu bạn vẫn muốn sử dụng Elaticsearch 5.x hoặc 6.x mới nhất, bạn sẽ cần sử dụng trực tiếp API với API của Client Client hoặc Node client thay vì spring-data-elaticsearch. Thực hiện theo các bước dưới đây để tải xuống và thiết lập công cụ Elaticsearch của bạn.
Bước 1 - Truy cập trang web chính thức của đàn hồi: https://www.elastic.co/doads/past-release .
Bước 2 - Chọn Elaticsearch trong trình đơn thả xuống và sau đó là phiên bản 2.4.4 và nhấp vào nút Tải xuống.
Bước 3 - Nó sẽ cung cấp cho bạn các tùy chọn nếu bạn muốn tải xuống dưới dạng Zip, TAR, RPM. Bạn có thể chọn theo sự thuận tiện của bạn. Tôi đã chọn định dạng Zip khi sử dụng nó trên windows.
Bước 4 - Giải nén nội dung đã tải xuống và vào bin
thư mục. Sẽ có một tập tin được đặt tên elasticsearch.bat
.
Bước 5 - Chạy tệp này trên hệ điều hành windows thông qua dấu nhắc lệnh và nó sẽ khởi động công cụ tìm kiếm linh hoạt cho bạn. Sau khi bắt đầu, nó sẽ bắt đầu nghe cổng 9200. Vì vậy, URL sẽ là http: // localhost: 9200 / Ngoài ra, cổng 9300 được hiển thị dưới dạng nút cụm. Cổng 9200 dành cho giao tiếp REST và có thể được sử dụng bởi Java hoặc bất kỳ ngôn ngữ nào khác và 9300 dành cho Nút cụm của Elaticsearch để giao tiếp với nhau. Java cũng có thể kết nối với nút cụm này bằng giao thức Transport.
Bước 6 - Kiểm tra để xác minh xem nó đã khởi động đúng chưa bằng cách khởi chạy URL bằng curl
lệnh. Bạn có thể sử dụng PowerShell trên Windows.
curl http://localhost:9200/
curl http://localhost:9200/
StatusCode : 200
StatusDescription : OK
Content : {
"name" : "Rl'nnd",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "9m9VQLE9SIqcmbn9nb19Eg",
"version" : {
"number" : "2.4.4",
"build_hash" : "fcbb46dfd45562a9cf00c604b30849a6dec6...
RawContent : HTTP/1.1 200 OK
Content-Length: 360
Content-Type: application/json; charset=UTF-8
{
"name" : "Rl'nnd",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "9m9VQLE9SIqcmbn9nb19Eg",
"versio...
Forms : {}
Headers : {[Content-Length, 360], [Content-Type, application/json; charset=UTF-8]}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 360
Cách phát triển ứng dụng khởi động mùa xuân của chúng tôi
Bây giờ, chúng tôi sẽ phát triển một ứng dụng Spring Boot để giới thiệu cách thức ElasticsearchTemplate
và truy cập ElasticsearchRepository
vào công cụ Elaticsearch và thực hiện các thao tác CRUD.
Trước khi chúng tôi phát triển ứng dụng, trước tiên hãy hiểu cách thức ElasticsearchTemplate
và ElasticsearchRepository
hoạt động.
ElaticsearchTemplate - Đây là một lớp Mẫu thực hiện ElasticsearchOperations
. Nó mạnh hơn ElasticsearchRepository
vì nó có thể làm nhiều hơn các hoạt động CRUD. Nó có các hoạt động để tạo, xóa các chỉ mục, tải lên hàng loạt. Nó có thể thực hiện tìm kiếm tổng hợp là tốt.
ElaticsearchRep repository - Nếu chúng tôi xác định một giao diện mở rộng giao diện ElasticsearchRepository
được cung cấp bởi dữ liệu Spring Elaticsearch, nó sẽ tự động cung cấp các hoạt động CRUD cho Tài liệu đó. Ví dụ: UserRepository
giao diện được xác định bên dưới với tài liệu " Người dùng " bằng cách mở rộng ElasticsearchRepository
. Bây giờ tất cả các hoạt động tìm, lưu, xóa và cập nhật mặc định có thể được thực hiện thông qua tài liệu Người dùng. Nếu bạn không biết tài liệu trong Elaticsearch là gì, hãy tiếp tục đọc để được giải thích sâu hơn.
@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
}
Đoạn mã trên mở rộng ElasticsearchCrudRepository
giao diện cuối cùng mở rộng giao diện Kho lưu trữ. Giao diện kho lưu trữ này là một tính năng tiêu chuẩn của khung dữ liệu Spring. Không cần cung cấp chi tiết triển khai cho giao diện này. Bạn cũng có thể viết các truy vấn tùy chỉnh bằng cách sử dụng @Query
chú thích.
Cả hai đều sử dụng Client client hoặc Node Client
Điều kiện tiên quyết
Đã cài đặt Java 1.8
IDE mã Eclipse hoặc Visual Studio
Maven
Phụ thuộc Maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Cấu hình
application.properties
cần phải có các thuộc tính Spring Data được sử dụng bởi và để kết nối động cơ. Tôi đã sử dụng các thuộc tính máy khách vận chuyển như các nút cụm và tên chỉ mục để kết nối công cụ Elaticsearch. ElasticsearchTemplate
ElasticsearchRepository
#application.properties
# Local Elasticsearch config
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.cluster-name=elasticsearch
elasticsearch.index.name=my_index
elasticsearch.user.type=user
# App config
server.port=8102
spring.application.name=BootElastic
Ánh xạ
Trong Elaticsearch, Index giống như một DB trong RDBMS và Mappings / Type tương tự như một bảng trong RDBMS. Tài liệu là tập hợp các trường thuộc một loại và nằm trong chỉ mục. Spring Data cung cấp chú thích giống nhau @Document
để tạo tài liệu. Ở đây, chúng tôi định nghĩa Người dùng là một tài liệu có chỉ mục là " my_index " và loại " người dùng ".
@Document(indexName = "my_index", type = "user")
public class User {
@Id
private String userId;
private String name;
private Date creationDate = new Date();
private Map<String, String> userSettings = new HashMap<>();
//getter and setters
}
Phát triển bộ điều khiển
Bộ điều khiển đầu tiên là UserController
. Nó sẽ sử dụng UserDAOImpl
t o cho phép ElasticserachTemplate
tương tác với ElaticsearchEngine.
@RestController
public class UserController {
@Autowired
private UserDAO userDAO;
@RequestMapping("/all")
public List<User> getAllUsers() {
return userDAO.getAllUsers();
}
@RequestMapping(value = "/new", method = RequestMethod.POST)
public User addUsers(@RequestBody User user) {
userDAO.addNewUser(user);
return user;
}
--- Other methods
}
UserDAOImpl
- Lớp này khởi tạo ElasticsearchTemplate
và sử dụng queryForList
phương thức để lấy dữ liệu.
@Repository
public class UserDAOImpl implements UserDAO {
private final Logger LOG = LoggerFactory.getLogger(getClass());
@Value("${elasticsearch.index.name}")
private String indexName;
@Value("${elasticsearch.user.type}")
private String userTypeName;
@Autowired
private ElasticsearchTemplate esTemplate;
@Override
public List<User> getAllUsers() {
SearchQuery getAllQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery()).build();
return esTemplate.queryForList(getAllQuery, User.class);
}
// Other methods
}
Một bộ điều khiển khác là UserRepositoryConroller
. Điều này sử dụng UserRepository
để tương tác với công cụ Elaticsearch.
@RestController
@RequestMapping("/repo")
public class UserRepositoryController {
@Autowired
private UserRepository userRepository;
@RequestMapping("/all")
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
userRepository.findAll().forEach(users::add);
return users;
}
//Other methods
}
Lớp kho lưu trữ này mở rộng ElasticsearchRepository
lớp mà bên trong mở rộng ElasticsearchCrudRepository
-> PagingAndSortingRepository
.
@Repository
public interface UserRepository extends ElasticsearchRepository<User, String> {
}
Bạn có thể tìm thấy mã đầy đủ trên GitHub .
Xây dựng ứng dụng
Ứng dụng có thể được xây dựng bằng các lệnh Maven.
mvn clean install
sẽ xây dựng mã và tạo tệp elaticsearch-0.0.1-SNAPSHOT.jar .
Chạy ứng dụng
java -jar target/elasticsearch-0.0.1-SNAPSHOT.jar
sẽ bắt đầu ứng dụng. Và ứng dụng sẽ lắng nghe cổng 8102 như được định nghĩa trong tệp application.properations .
Kiểm tra ứng dụng
Kiểm tra luồng UserControll sử dụng ElasticsearchTemplate
.
Bước 1 - Thêm người dùng mới. Sử dụng URL API REST này để thêm người dùng mới: http://localhost:8102/new
Thêm dữ liệu JSON trong phần thân Yêu cầu.
{
"name": "Sumit",
"userSettings": {
"gender" : "male",
"occupation" : "CA",
"hobby" : "chess"
}
}
Bước 2 - Kiểm tra phản hồi. Bạn sẽ thấy một người dùng mới được tạo với một userId
tài liệu được tạo duy nhất là tài liệu này. Đầu ra sẽ như sau:
{
"userId": "AWdj-3KcTJbZRlQtLZfO",
"name": "Sumit",
"creationDate": 1543570682521,
"userSettings": {
"gender": "male",
"occupation": "CA",
"hobby": "chess"
}
}
Bước 3 - Để truy xuất tất cả người dùng, hãy sử dụng http://localhost:8102/all
{
"userId": "AWdj-3KcTJbZRlQtLZfO",
"name": "Sumit",
"creationDate": 1543570682521,
"userSettings": {
"gender": "male",
"occupation": "CA",
"hobby": "chess"
}
},
{
"userId": "AWdZuKFRgzULDLBu_Y0c",
"name": "Suresh",
"creationDate": 1543398531296,
"userSettings": {}
}
Kiểm tra luồng UserRep repositoryControll sử dụng ElasticsearchRepository
.
Bước 1 - Thêm người dùng mới. Sử dụng URL API REST này để thêm người dùng mới: http://localhost:8102/repo/new
Thêm dữ liệu JSON trong phần thân yêu cầu như chúng ta đã làm với trường hợp thử nghiệm trước đó.
Bước 2 - Kiểm tra phản hồi. Bạn sẽ thấy một người dùng mới được tạo với một userId
tài liệu duy nhất cho tài liệu này.
Có nhiều API khác tôi đã nhập mã mà bạn có thể chơi xung quanh. Nó sẽ giới thiệu cách ElasticsearchTemplate
có thể làm việc với các chỉ mục, Cách bạn có thể tìm kiếm theo tên trường. Với ElasticsearchRepository
, bạn có thể tìm kiếm userId
là tốt.
Có nhiều cách khác để chúng ta có thể kết nối với Elaticsearch Engine. Tôi sẽ chỉ cung cấp giới thiệu ngắn gọn về họ ở đây vì nó sẽ yêu cầu toàn bộ blog mới để giải thích chi tiết.
Spring Boot with Transport Client - Như đã giải thích ở trên, nếu bạn muốn sử dụng công cụ Elaticsearch mới nhất 5.x hoặc 6.x, Spring Data Elaticsearch sẽ không hỗ trợ như bây giờ. Nhưng Elaticsearch cung cấp RestHighLevelClient
lớp hoạt động tốt với phiên bản mới nhất và sử dụng RestClient
lớp để định cấu hình máy chủ và cổng cho cụm. Nó sử dụng index()
phương thức với IndexRequest
tư cách là đầu vào để tạo một tài liệu. Nó sử dụng get()
phương thức GetRequest
làm đầu vào để tìm kiếm tài liệu. Nó có update()
và delete()
phương pháp là tốt.
Node.js - Nếu bạn không phải là người hâm mộ Java / Spring, thì bạn cũng có tùy chọn sử dụng Node.js. Những gì bạn cần làm là tải xuống elasticsearch
và get-json
các mô-đun bằng cách sử dụng npm. Elaticsearch có một mô-đun máy khách có thể định cấu hình máy chủ và cổng của cụm máy chủ Elaticsearch. Khách hàng này có các phương thức như create()
tạo chỉ mục và index()
đưa tài liệu vào chỉ mục đó.
Đó là tất cả để tích hợp Elaticsearch với dự án Spring Data này. Xin vui lòng cho tôi biết quan điểm của bạn thông qua ý kiến. Rất vui được giải quyết các thắc mắc của bạn nếu tôi có thể.