**Reference **
- API : https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- Search API : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html
- Quick : http://www.elasticsearchtutorial.com/elasticsearch-in-5-minutes.html
- DOC : https://github.com/elastic/elasticsearch
- Chị Ngọc : https://nguyenthingocblog.wordpress.com/2014/08/22/elasticsearch-introduction/
1. Elasticsearch, so what’s it?
- Elasticsearch là một
search engine
. - Elasticsearch được xây dựng để hoạt động như một server cloud theo cơ chế của RESTful.
- Kế thừa và phát triển từ
Lucene
Apache. - Phát triển bằng ngôn ngữ
Java
. - Là phần mềm
open-source
được phát hành theo giất phép củaApache License
. - Tương tự :
- Solr (Apache).
- Những ai đã dùng Elasticsearch :
- Mozilla
- Quora
- SoundCloud
- GitHub
- Stack Exchange
- Center for Open Science
- Reverb
- Netflix.
2. How does it work?
Indexing
Câu hỏi
: Elasticsearch được gọi là real-time search
bởi vì khả năng trả lại kết quả tìm kiếm của nó là nhanh chóng, vậy nó hoạt động như nào để có thể được gọi là real-time search
?
Trả lời
: Thay vì search text, Elasticsearch nó search index
, cơ chế này gọi là inverted index
Ví dụ bây h ta tìm kiếm một từ nào đó trong một cuốn sách thì :
- Search kiểu hàng ngày : lật từng trang và tìm kiếm từng từ trong mỗi trang.
tìm trang -> ra text
- Search kiểu
inverted index
: lật ngay tới phụ lục (Index table) và tìm các trang có chứa từ đó.tìm text -> ra trang
.
Indexes là cơ chế dùng để tìm kiếm nhanh hơn các record trong databse, tránh việc phải đọc toàn bộ các record trong một table
Vậy khi tìm kiếm một bản ghi nào đó trong DB thay vì phải duyệt toàn bộ các bản ghi trong table thì ta sẽ dựa vào index để tìm ra những bản ghi được nhanh hơn, giống như cơ chế tìm một từ trong cuốn sách như trên.
- Ta sẽ xém xét ví dụ sau để hiểu rõ hơn về
inverted index
. - Ta có 3 document là D1, D2, D3 :
- D1 = “hom nay troi mua”
- D2 = “hom nay troi nang”
- D3 = “mot ngay dep troi”
- Theo đó ta sẽ có
inverted index
của 3 document trên là- “hom” = {D1, D2}
- “nay” = {D1, D2}
- “troi” = {D1, D2, D3}
- “mua” = {D1}
- “nang” = {D2}
- “mot” = {D3}
- “ngay” = {D3}
- “dep” = {D3}
- Ví dụ khi muốn search từ “hom nay” (tùy theo việc là query theo kiểu and hay or thì phép tính toán sẽ khác đi.)
- Nếu là AND : {D1, D2} ∩ {D1, D2} = {D1, D2}
- Nếu là OR : {D1, D2} ∪ {D1, D2} = {D1, D2}
3. Installing and running ElasticSearch.
Install
- Có rất nhiều cách để install ElasticSearch, tham khảo tại : https://www.elastic.co/downloads/elasticsearch
- Có thể cài đặt manual, hay từ Repository của Linux hay Redha : https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-on-an-ubuntu-vps
- With me.
- Down ElasticSearch: https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.6.0.zip
Run
- TIP: Trong file ~/bash.rc ta export path cho Elasticsearch lệnh để dùng ở mọi nơi.
PATH=$PATH$( find $HOME/Elasticsearch/ -type d -printf ":%p" )
# $HOME/Elasticsearch/ là nơi bạn đặt folder Elastic-search vừa down về ở trên.
- Chạy Elasticsearch:
$ which elasticsearch
# => /home/leminhtuan/Elasticsearch/elasticsearch-1.6.0/bin/elasticsearch
$ elasticsearch
- ES sẽ chạy tại địa chỉ : localhost:9200
- Kiểm tra kết nối tới server Elasticsearch, nếu thành công ta sẽ thu được chuổi JSON như bên dưới.
$ curl 0:9200
{
"status" : 200,
"name" : "Karl Mordo",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.6.0",
"build_hash" : "cdd3ac4dde4f69524ec0a14de3828cb95bbb86d0",
"build_timestamp" : "2015-06-09T13:36:34Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
4. Directory Layout
- Kiến trúc thư mục của Elasticsearch
bin
là thư mục chứa những script để start/stop Elasticsearch.conf
chứa nững file configdata
khi taIndexing
(hay là chính là việc insert dữ liệu) thì data sẽ được store ở đây.logs
chứa logsplugins
plugin mà Slasticsearch dùng.
5. Indexing Data.
- Như đã biết Elasticsearch là một tool hỗ trợ search thông tin vậy trước khi search ta phải có dữ liệu để search, quá trình
Indexing Data
giống như việc tạo dữ liệu cho database. - Trong quá trình
Indexing Data
Elasticsearch sẽ thực hiện một cơ chế đánh index nào đó (em k rõ!) để phục vụ cho tìm kiếm sau này. - Elasticsearch cung cấp một API hoạt động theo cơ chế của Restful:
- Method
PUT
để insert/update dữ liệucurl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{"user" : "kimchy"}'
- Method
GET
để lấy dữ liệucurl -XGET 'http://localhost:9200/twitter/tweet/1'
- Method
DELETE
xóa dữ liệu.curl -XDELETE 'http://localhost:9200/twitter/tweet/1'
- Method
Câu Hỏi:
Có cách nào để từ một database sẵn có (như đã có một mysql db) ta sẽ dùng Elasticsearch để search những trong Db đó hay bắt buộc phải Indexing Data rồi mới search được ???????????????
Trả lời:
Theo em biết thì phải Indexing Data để Elasticsearch tạo index cho từng record được insert rồi mới có thể search. (please corect me if i got wrong !!!)
6. Searching
- Sau khi đã khởi tạo dữ liệu bằng việc
Indexing
lúc này ta đã có thể thực hiện search text từ những dữ liệu ta vừa mớiIndexing
- Tìm kiếm bản ghi trong
- database (index) : blog
- trong table (type) post
- trường user có giá trị là “dilber”
$ curl 'http://localhost:9200/blog/post/_search?q=user:dilbert&pretty'
- Tham khảo tại : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html
7. Shutdown.
- Hit Ctrl+C