01/10/2018, 16:49

Kết quả tìm kiếm FullTextSearch không như mong muốn?

Hiện tại mình đang làm chức năng search cho website viết bằng Laravel, csdl Mysql.

Vấn đề hiện tại chức năng search (mình dùng FullTextSearch) trả về kết quả không mong muốn :

Ví dụ database, có record Nếu Có Buông Tay, khi mình search Nếu có /có buông / buông tay tiếng việt có dấu hay không dấu đều trả về kết quả Nếu Có Buông Tay. Nhưng khi search Nếu Buông / Có Tay thì không trả về kết quả nào cả, tương tự với Love The Way You Lie, khi search Love You Lie cũng không trả về kết quả nào.

Đây là đoạn code function search của mình:

<?php
 
namespace App;
 
trait FullTextSearch
{
    protected function fullTextWildcards($term)
    {
        // removing symbols used by MySQL
        $reservedSymbols = ['-', '+', '<', '>', '@', '(', ')', '~', '.'];
        $term = str_replace($reservedSymbols, ' ', $term);
        $words = explode(' ', $term);
        $searchTerm = implode( ' ', $words);
        return $searchTerm;
    }
 
    public function scopeFulltextsearch($query, $term)
    {   
        $columns = implode(',',$this->searchable);

        // If user search only one word or one character
        if(!ctype_space($term)) {
            return $query->whereRaw("CONCAT($columns) LIKE '%".$term."%'") ;
        }
        $searchableTerm = $this->fullTextWildcards($term);
 
        return $query->selectRaw("MATCH ({$columns}) AGAINST (? IN BOOLEAN MODE) AS relevance_score", [$searchableTerm])
                ->whereRaw("MATCH ({$columns}) AGAINST (? IN BOOLEAN MODE)", $searchableTerm)
                ->orderByDesc('relevance_score');
    }
}

Mình đã đọc tài liệu về full text search, inverted index nhưng không tìm ra được solution. Mong mọi người giúp đỡ.

Mình cảm ơn trước

Trương Tấn Phát viết 18:54 ngày 01/10/2018

Fuzzy search

Trong MySQL SOUNDEX() nhưng không hoạt động trên Unicode.

stackoverflow.com
AFG

How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?

mysql, string, matching, fuzzy-search
asked by AFG on 09:21PM - 15 Dec 08
Lythesuk Nguyen viết 18:58 ngày 01/10/2018

bạn chụp cho mình xem cái đoạn bạn khai báo fulltext index của nó với. Mình đã làm cái fulltext search này nhưng cho tiếng Nhật. Vừa thử đảo chữ thấy vẫn tìm ra bình thường. Tiếng Việt thì chắc cũng na ná tiếng Nhật

Lythesuk Nguyen viết 18:58 ngày 01/10/2018

Mình nghĩ là có thể tại bạn dùng " IN BOOLEAN MODE". thử thay bằng “IN NATURAL LANGUAGE MODE”

https://forum.gocit.vn/threads/mysql-full-text-search.323/
XXXTentacion viết 19:01 ngày 01/10/2018

cám ơn mọi người đã giúp đỡ, sau khi mò bug 1 hồi mình đã tìm ra được giải pháp.

Vấn đề là đoạn code xử lý ở trên chưa tốt nên dẫn đến không search full text mà chỉ search theo LIKE

Bài liên quan
0