Lập trình chức năng tìm kiếm trong php với elasticsearch php client

Elasticsearch là gì?

Elasticsearch là gì? – là một trong những công cố gắng tìm tìm dựa trên gốc rễ Apache Lucene. Nó cung ứng một bộ máy tìm tìm dạng phân tán, có không hề thiếu công vậy với một bối cảnh web HTTP có hỗ trợ dữ liệu JSON.

Bạn đang xem: Lập trình chức năng tìm kiếm trong php với elasticsearch php client

Elasticsearch được cải cách và phát triển bằng Java cùng được xây cất dạng nguồn mở theo bản thảo Apache.

Chi tiết về Elasticsearch là gì? (ES)

Elasticsearch là một search engine.Elasticsearch được thừa kế từ Lucene ApacheElasticsearch thực hóa học hoặt động như một web server, có tác dụng tìm kiếm mau lẹ (near realtime) thông qua giao thức RESTfulElasticsearch có kỹ năng phân tích với thống kê dữ liệuElasticsearch chạy trên server riêng cùng đồng thời tiếp xúc thông qua RESTful vì vậy nên nó không dựa vào vào client viết bởi gì hay khối hệ thống hiện tại của bạn viết bằng gì. Cho nên việc tích phù hợp nó vào hệ thống bạn là dễ dàng, bạn chỉ cần gửi request http lên là nó trả về kết quả.Elasticsearch là 1 khối hệ thống phân tán và có tác dụng mở rộng tuyệt đối (horizontal scalability). Thêm thêm node mang lại nó là nó từ bỏ động tự động hóa mở rộng đến bạn.Elasticsearch là 1 open source được trở nên tân tiến bằng Java

Các công ty lớn đang sử dụng

WikimediaathenahealthAdobe SystemsFacebookStumbleUpon Mozilla,Amadeus IT GroupQuoraFoursquareEtsySoundCloudGitHubFDACERNStack ExchangeCenter for mở cửa ScienceReverbNetflixPixabayMotiliSophosSlurm Workload Manager

Elasticsearch chuyển động như cố nào?

*
*
*
*

3. Shard

Shard là đối tượng người sử dụng của Lucene , là tập bé các documents của 1 Index. Một Index rất có thể được chia thành nhiều shard.Mỗi node bao có nhiều Shard . Cũng chính vì thế Shard mà là đối tượng nhỏ nhất, vận động ở mức phải chăng nhất, vào vai trò tàng trữ dữ liệu.Chúng ta gần như là không khi nào làm việc trực tiếp với các Shard vì Elasticsearch đã support toàn bộ việc tiếp xúc cũng như auto thay đổi các Shard khi buộc phải thiết.Có 2 loại Shard là : primary shard và replica shard.3.1 : Primary ShardPrimary Shard là sẽ tàng trữ dữ liệu và đánh index . Sau khoản thời gian đánh ngừng dữ liệu sẽ được vận gửi tới các Replica Shard.Mặc định của Elasticsearch là mỗi index sẽ bao gồm 5 Primary shard và với mỗiPrimary shard thì sẽ đi kèm theo với 1 Replica Shard.3.2 : Replica ShardReplica Shard đúng như cái brand name của nó, nó là nơi lưu trữ dữ liệu nhân phiên bản của Primary ShardReplica Shard có vai trò bảo đảm an toàn tính toàn vẹn của tài liệu khi Primary Shardxảy ra vấn đề.Ngoài ra Replica Shard có thể giúp bức tốc tốc độ search kiếm vì bạn cũng có thể setup lượng Replica Shard nhiều hơn mặc định của ES
Instant AJAX tìm kiếm với Laravel với Vuejs

4. Node

Là trung tâm hoạt động vui chơi của Elasticsearch. Là nơi tàng trữ dữ liễu ,tham gia thực hiện đánh index cúa cluster cũng như triển khai các thao tác làm việc tìm kiếmMỗi node được định danh bằng 1 unique name

5. Cluster

Tập vừa lòng các nodes hoạt hễ cùng cùng với nhau, chia sẽ cùng thuộc tính cluster.name. Chính vì thế Cluster sẽ được xác định bằng 1 ‘unique name’. Việc định danh các cluster trùng tên sẽ gây ra lỗi cho các node vì vậy khi setup các bạn cần không còn sức để ý điểm nàyMỗi cluster có một node chính (master), được lựa lựa chọn 1 cách tự động hóa và có thể thay rứa nếu sự ráng xảy ra. Một cluster có thể bao gồm 1 hoặc nhiều nodes. Các nodes gồm thể hoạt động trên thuộc 1 hệ thống .Tuy nhiên trong thực tế , một cluster sẽ gồm nhiều nodes hoạt cồn trên những server khác biệt để bảo đảm nếu 1 server chạm chán sự chũm thì hệ thống khác (node khác) gồm thể chuyển động đầy đủ tác dụng so với khi gồm 2 servers. Các node có thể tìm thấy nhau để chuyển động trên cùng 1 cluster qua giao thức unicast.

Chức năng thiết yếu của Cluster đó chính là quyết định xem shards nào được phân bổ cho node nào và khi nào thì dịch chuyển các Cluster để cân bằng lại Cluster

Ưu điểm yếu của ES

Ưu điểm

Tìm kiếm dữ liệu rất nhanh chóng, mạnh bạo dựa bên trên Apache Lucene ( near-realtime searching)Có năng lực phân tích dữ liệu (Analysis data)Khả năng không ngừng mở rộng theo chiều ngang hay “vòi”Hỗ trợ search kiếm mờ (fuzzy), có nghĩa là từ khóa tra cứu kiếm hoàn toàn có thể bị không nên lỗi chính tả hay không đúng cú pháp thì vẫn có công dụng elasticsearch trả về công dụng tốt.Hỗ trợ Structured Query DSL (Domain-Specific Language ), hỗ trợ việc quánh tả phần đông câu truy nã vấn phức tạp một cách rõ ràng và rõ ràng bằng JSON.Hỗ trợ nhiều Elasticsearc client như Java, PhP, Javascript, Ruby, .NET, Python

Nhược điểm

Elasticsearch được kiến thiết cho mục đích search, vì thế với những nhiệm vụ khác ngoài search như CRUD thì elastic kém chũm hơn so với các database khác như Mongodb, Mysql …. Do vậy người ta ít khi dùng elasticsearch làm cho database chính, nhưng thường kết hợp nó với cùng một database khác.Trong elasticsearch không gồm khái niệm database transaction , tức là nó sẽ không bảo vệ được toàn diện dữ liệu trong những hoạt độngInsert, Update, Delete.Tức khi chúng ta thực hiện thay đổi nhiều phiên bản ghi nếu xẩy ra lỗi thì sẽ khiến cho logic của chính bản thân mình bị sai hay dẫn đến mất đuối dữ liệu. Đây cũng là một phần khiến elasticsearch không cần là database chính.Không thích phù hợp với những hệ thống thường xuyên update dữ liệu. Sẽ tương đối tốn hèn cho bài toán đánh index dữ liệu.

Xem thêm: Bé Mấy Tháng Biết Ngồi Và Làm Những Thứ Khác Nữa? Giải Đáp Tất Tần Tật Cho Mẹ

Cài đặt ElasticSearch

Yêu cầu

Elasticsearch yêu mong Java 8 trở lên với phải thiết lập cấu hình biến môi trường JAVA_HOME đến java, vị đó trước lúc cài Elasticsearch, hãy chắc hẳn rằng rằng bạn đã cài Java version >= 8 bên trên máy.

Kiểm tra bằng lệnh java -version để tìm hiểu máy máy tôi đã cài Java không và phiên bạn dạng Java đang mua là bao nhiêu. Kiểm tra biến hóa môi trường JAVA_HOME đã được tùy chỉnh chưa bởi lệnh: echo $JAVA_HOME

Cài đặt

Download và thiết lập Elasticsearch PGP Key bằng lệnh sau:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key showroom -Để thiết lập Elasticsearch trên Ubuntu ta tất cả 2 biện pháp là thiết lập từ Repository hoặc tải từ tệp tin .deb

Cách 1: giải pháp Elasticsearch bằng APT Repository

Cài gói apt-transport-https

sudo apt-get install apt-transport-httpsLưu quan niệm repository vào /etc/apt/sources.list.d/elastic-6.x.list:

(Repository mang định ko có elasticsearch)

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.listCài để Elasticsearch bởi lệnh:

sudo apt-get update && sudo apt-get install elasticsearchDone!

Cách 2: cài đặt elasticsearch bởi gói .deb

Chạy những lệnh dưới đây để download và setup elasticsearch bởi file .deb

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.debwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.deb.sha512shasum -a 512 -c elasticsearch-6.4.0.deb.sha512 sudo dpkg -i elasticsearch-6.4.0.debDone!

Chạy elasticsearch.

Elasticsearch sau khi được cài đặt sẽ không auto chạy.

Để khởi động, start, stop elasticsearch ta làm như sau:

Lệnh để chạy server elasticsearch$ sudo systemctl start elasticsearch.service:

$ sudo systemctl start elasticsearch.serviceLệnh khởi tạo ra 1 index, mapping vào index đó và 1 document:

$ curl -X PUT http://localhost:9200/team/_mapping/memberKhởi tạo thành công xuất sắc , màn hình hiển thị sẽ trả về dòng

"acknowledged":true,"shards_acknowledged":true,"index":"team"Là khởi tạo thành công index “team”

Sử dụng câu lệnh nhằm truy xuất dữ liệu trên ElasticSearch

Lệnh liệt kê các index có trong ES:

$ curl -X GET "localhost:9200/_cat/indices?v"Lệnh sinh sản document của index: ở đó là thêm member với những trường nằm trong tính$ curl -X PUT http://localhost:9200/team/_mapping/member?&"properties"= &"id"= "type": "text" ,&"name"= "type": "text" ,&"email"= "type": "text" ,&"age"= "type": "integer" ,&"phone"= "type": "text" ,&"image"= "type": "text" ,&"technologies"= "type" : "text" &&Lệnh kiểm tra tất cả index sẽ khởi tạo:$ curl -X GET http://localhost:9200/team?prettyLệnh thêm, sửa tài liệu vào index trên(team), ở đấy là dữ liệu vị nhóm em kém chất lượng ra cùng insert vào$ curl -X PUT http://localhost:9200/team/member/_bulk?{"create"= "_id": 1, "_type": "member"&"id"= "5510ce4ee174054836ef3c5a","name": "Vargas Rosa","email": "","age": 25,"phone": "+1 (807) 530–3567","image": "http://api.randomuser.me/portraits/men/78.jpg","description": "enim Lorem upidatat et nostrud ut irure qui qui nulla qui deserunt fugiat laborum elit","technologies": "ios javascript python"&{"create"= "_id": 2, "_type": "member"&"id"= "5510ce4e24ecdab88fe18d06","name": "Navarro Thornton","email": "","age": 34,"phone": "+1 (896) 579–3364","image": "http://api.randomuser.me/portraits/men/59.jpg","description": "sit enim velit cillum magna commodo tempor","technologies": "swift erlang java"&{"create"= "_id": 3, "_type": "member"&"id"= "5510ce4e6e7bbdbc120c9a89","name": "Francine Aguirre","email": "","age": 30,"phone": "+1 (963) 492–3402","image": "http://api.randomuser.me/portraits/men/82.jpg","description": "cu et sit ullamco tempor Lorem excepteur magna pariatur","technologies": "javascript ionic ruby"&{"create"= "_id": 4, "_type": "member"&"id"= "5510ce4ebd2a509edd8c6b50","name": "Krystal Simmons","email": "","age": 40,"phone": "+1 (857) 418–2040","image": "http://api.randomuser.me/portraits/women/10.jpg","description": "ea dolor ex proident eiusmod et ut irure esse","technologies": "ruby c c" Lệnh hiển thị thông tin các dữ liệu trong document với của từng doccument sau khi đã thêm$ curl -X GET http://localhost:9200/team/member/4?prettyLệnh tìm kiếm kiếm tất cả dữ liệu những document trong index thực hiện API Search$ curl -X GET http://localhost:9200/_search?pretty=trueLệnh kiếm tìm kiếm theo text nhập ở toàn bộ các trường vào document , ở chỗ này key search của mình là ruby, đây cũng chính là điểm mạnh mẽ của Elasticsearch, nó không giống với query like như thao tác với DB bởi vì nó rất cần phải nhập rất đầy đủ text đó ví như ruby làm việc trên vẫn trả về những document thành viên có text là ruby trong tất cả các field$ curl -X GET http://localhost:9200/_search?q=rubyLệnh xóa 1 index $ curl -X DELETE "localhost:9200/cuongquach-company"

Tài liệu tìm hiểu thêm Elasticsearch là gì?

Vẫn còn một trong những các hoạt động, các API để xử trí vào làm việc với Index vào Elasticsearch, nhưng với phần tò mò ở trên về một công cụ trẻ trung và tràn trề sức khỏe như elasticsearch là đủ để hoàn toàn có thể thao tác, áp dụng và có tác dụng quen cùng với elasticsearch. Các chúng ta cũng có thể tham khảo ở các trang dưới đây.