Search LIKE trên Elastic search
Bên em đang nhận đc yêu cầu làm 4 loại seach: tuyệt đối, XXX%, %XXX, %XXX% nhưng vì đang làm search bằng Elastic search nên hiện nay chỉ để tìm đc kiểu %XXX%. Muốn tìm bằng 3 kiểu còn lại thì phải làm thế nào ạ? Đây là lần đầu tiên bên em làm với Elastic search nên ko có kinh nghiệm lại nghiên cứu mãi không ra.
1 CÂU TRẢ LỜI
để search tuyệt đối thì bạn dùng
{
"match" : {
"message" : {"title": "XXX"}
}
}
để search %XXX
{
"match" : {
"message" : {"title": "XXX"},
"type" : "phrase_prefix"
}
}
hoặc
{
"wildcard" : { "name" : "ki*y" }
}
Sử dụng cách này có thể query cùng với các kí tự thay thế đặc biệt trong linux như kí tự * dùng để thay thế cho một xâu con bất kì, kí tự '?' để thay thế cho một kí tự bất kì, hoặc truy vấn bằng regular expression. Bạn nên cài thêm kibana cho dễ dùng nó giống kiểu phpmyadmin ây
Em cảm ơn ạ. Nhưng anh phụ trách Elastic search bên em bảo không được. Anh đã từng áp dụng cách này và search LIKE thành công chưa ạ?
Thât ra cách làm như @tuanna2704 thì cũng đã làm được rồi, Mình xin bổ xung thêm là nếu cần tính _score thì dùng cách trên, Còn nếu không thì dùng filter để tăng performent
Còn vấn đề bạn @graywings bảo làm không được thì bạn có thể tạo data để thử, có thể vấn đề nằm ở phần khác, chẳng hạn như field là text nhưng có thể nó đã alalyze string rồi (ví dụ '1234-yt' thì bị tách ra '1234' và 'yt')
@graywings xin lỗi bạn h mình mới đọc tin nhắn ạ, bạn có thể show code lên đây không ạ
@huong.nhdh thank bác h mình mới biết :v