eCommerce & ElasticSearch?
Published in
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.