6

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 Bootmù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  elasticsearchvà  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ể.

|