eCommerce & ElasticSearch?

Nguyễn Quang Huy
Edumall Engineering
1 min readFeb 12, 2019

ElasticSearch là một search engine base trên Lucene rất mạnh:

  • distributed
  • multitenant-capable
  • full-text search engine
  • HTTP & TCP connection support

Trong khi đó “tìm kiếm” là một chức năng rất quan trọng của eCommerce vì vậy ES là một trong những giải pháp tốt nhất cho “tìm kiếm” trên eCommerce

Bài toán tìm kiếm trên eCommerce

  • Cho phép tìm kiếm theo tên của sản phẩm (product), tên của danh mục (category), tên của nhà cung cấp (vendor) và mô tả của sản phẩm
  • Độ ưu tiên của product.name > category.name > vendor.name > product.description

Giải pháp

Sử dụng multi_match & _score của ES

{
"query":{
"bool":{
"must":[
{
"bool":{
"should":[
{
"multi_match":{
"query":"KEYWORD",
"fields":[
"name^10",
"categories.name^6",
"vendor.name^5",
"description"
]
}
}
]
}
}
]
}
}
}

Yêu cầu nâng cao

Riêng với trường tên của sản phẩm cho phép tìm kiếm theo dạng “like”

Giải pháp là kết hợp dùng thêm wildcard của ES

{
"query":{
"bool":{
"must":[
{
"bool":{
"should":[
{
"multi_match":{
"query":"KEYWORD",
"fields":[
"name^10",
"categories.name^6",
"vendor.name^5",
"description"
]
}
},
{
"wildcard":{
"name":"*KEYWORD*"
}
}
]
}
}
]
}
}
}

Tổng kết

Trên đây là giải pháp tìm kiếm cho nội dung không thuộc loại có dấu như tiếng Việt hay tiếng Đức (nội dung tiếng Anh, tiếng Thái). Giải pháp cho nội dung tiếng Việt mình hy vọng có cơ hội trình bày khi găp phải.

--

--