- vừa được xem lúc

Tìm hiểu Text và Keyword trong Elasticsearch

0 0 140

Người đăng: P Griffin

Theo Viblo Asia

Giới thiệu

Khi mình mới bắt đầu tìm hiểu về Elasticsearch mình không nghĩ rằng giữa kiểu dữ liệu TextKeyword có sự khác nhau nhưng khi vào dự án thực tế mình mới nhận ra được sự khác biệt giữa 2 kiểu dữ liệu này. Sự khác biệt giữa 2 kiểu dữ liệu này cũng rất đơn giản nhưng cũng rất quan trọng. Trong bài viết này, mình sẽ nói về sự khác biệt, cách sử dụng 2 kiểu dữ liệu này, cách 2 kiểu dữ liệu này xử lý và nên sử dụng cái nào giữa hai cái.

Sự khác biệt

  • Text : Elasticsearch sẽ phân tích dữ liệu trước khi nó được lưu vào Index. VD: chúng ta có 1 đoạn văn bản Laravel is a web application framework nếu search với từ khóa web thì tất cả các bản ghi chứa từ khóa là web sẽ được trả về
  • Keyword: Ngược lại với Text kiểu dữ liệu Keyword sẽ không đi phân tích dữ liệu trước khi được lưu vào Index. VD: chúng ta có 1 đoạn văn bản Laravel is a web application framework nếu search với từ khóa web thì không có kết quả nào được trả về mà chúng ta bắt buộc phải nhập đúng là Laravel is a web application framework

Cách sử dụng

Dưới đây mình sẽ thiết lập mapping với TextKeyword như sau:

Keyword mapping

PUT articles
{ "mappings": { "_doc": { "properties": { "name": { "type": "keyword" } } } }
}

Text mapping

PUT articles
{ "mappings": { "_doc": { "properties": { "name": { "type": "text" } } } }
}

Cách Keyword và Text hoạt động

Cả 2 kiểu dữ liệu này được lập chỉ mục khác nhau trong Index, sự khác biệt trong lúc đánh index sẽ ảnh hưởng đến kết quả trả về lúc chúng ta thực hiện query.

Keyword mapping

Như mình đã nói ở trên nếu thiết lập với kiểu Keyword thì Elasticsearch sẽ không thực hiện phân tích tức là chuỗi mà bạn nhập vào sẽ được dữ y chang như vậy, như ví dụ ở trên bạn phải nhập đúng là Laravel is a web application framework thì mới có kết quả trả về. Trường hợp chúng ta chỉ nhập 1 từ có chứa trong đoạn văn bản này thì Elasticsearch cũng sẽ không tả về kết quả mặc dù đoạn văn bản trong ví dụ có chứa nó.

Text mapping

Không giống như Keyword kiểu dữ liệu này sẽ được Elasticsearch phân tích trước khi đánh Index. Mặc định trình phân tích analyzer của Elasticsearch sẽ tách split chia nhỏ và lowercase các kí tự là chuỗi. Với ví dụ ở trên là Laravel is a web application framework thì với kiểu dữ liệu này Elasticsearch sẽ như sau:

Term Count
laravel 1
is 1
a 1
web 1
application 1
framework 1

Bây giờ nếu bạn nhập từ khóa tìm kiếm là web thì tất cả các bản ghi có chứa từ khóa này sẽ được trả về.

Sử dụng trong trường hợp nào

Keyword

  • Kết quả trả về phải match hoàn toàn với từ khóa tìm kiếm
  • Query giống như database
  • Sử dụng với wildcard query

Text

  • Khi bạn muốn tạo một chức năng tìm kiếm lớn
  • Chức năng tìm kiếm có các gợi ý với từ khóa gần giống với từ khóa đã nhập

Tham khảo

https://kb.objectrocket.com/elasticsearch/when-to-use-the-keyword-type-vs-text-datatype-in-elasticsearch https://betterprogramming.pub/elasticsearch-text-vs-keyword-2ccb99ec72ae

Bình luận

Bài viết tương tự

- vừa được xem lúc

Elasticsearch là gì ?

. Lời nói đầu. Elasticsearch là gì .

0 0 35

- vừa được xem lúc

Backup và Restore Elasticsearch snapshot với AWS S3 trong Kubernetes

Ở công ty mình vừa có mấy task devops liên quan đến scaling, clustering Elasticsearch nên viết lại đề phòng sau này cần dùng. Có một task là chuyển dữ liệu từ single-node Elasticsearch cũ lên cluster mới.

0 0 50

- vừa được xem lúc

Reindex Elasticsearch data with zero downtime

Elasticsearch là một search engine tuyệt vời cho mọi dự án muốn áp dụng chức năng search cho sản phẩm của mình, với những tính năng như là near-realtime search, auto-complete, suggestion,.... Cùng với đó là lợi thế kiến trúc distributed search system, có thể dễ dàng scaling, failing handle. Khi muốn

0 0 40

- vừa được xem lúc

Fork you ElasticSearch! How Open Source Works

ElasticSearch recently dropped its open-source licensing strategy, prompting AWS to fork it. Learn how "Open Source" actually works and how companies profit from it.

0 0 48

- vừa được xem lúc

Tìm hiểu và cài đặt Elasticsearch

Elasticsearch là gì. Elasticsearch cung cấp công cụ tìm tiếm và phân tích gần như là thời gian thực, áp dụng với mọi kiểu dữ liệu - văn bản có cấu trúc hoặc phi cấu trúc, số, thông tin địa lý.

0 0 113

- vừa được xem lúc

[NLP] Cải thiện Elasticsearch trong bài toán semantic search sử dụng phương pháp Sentence Embeddings

Elasticsearch. Elasticsearch là gì .

0 0 696