FullText或LIKE搜索问题(无法找到广告资源)

时间:2016-08-18 15:56:08

标签: php mysql laravel full-text-search sql-like

当用户搜索我知道的内容在广告资源中时,在我的广告资源中查找商品时遇到了一些问题。

表列是ManufacturerNameMatch,SubCategoryNameMatch,MainCategoryNameMatch,Model_Name

当我搜索Nikon Ti-E时,脚本似乎无法找到它。但是,我知道它在库存中。在数据库中,Model_Name列为" Eclipse Ti-E w / HUBC倒相对比"而且,ManufacturerNameMatch是'尼康'

我使用FullTextSearch索引进行多个单词搜索,但似乎无法找到它,所以我一直在搞乱连接列并使用LIKE搜索(仍然没有)。想知道某人是否有更好的想法,或者我做错了什么或者没有用FullTextIndex搜索或者用MySQL搜索LIKE。

$category = 'Nikeon Ti-E'
$findPhraseMatch = DB::table('inventory')
                                ->selectRaw(DB::raw("*, GROUP_CONCAT(CambridgeID) as `CambridgeIDArray`, count(*) as `groupTotal`"))
                                ->where(DB::raw("CONCAT_WS(' ', ManufacturerNameMatch, SubCategoryNameMatch, MainCategoryNameMatch, Model_Name)"), 'LIKE', "%$category%")                                   
                                ->where('Units_OnHand', '>=', 1)                                    
                                ->groupBy('Model_Name', 'ManufacturerNameMatch')
                                ->orderBy('ManufacturerNameMatch')
                                ->paginate(15); 

FullText搜索

// $final would look like +nikon +ti+e
$findFullMatch = DB::table('inventory')
                        ->selectRaw(DB::raw("*, GROUP_CONCAT(CambridgeID) as `CambridgeIDArray`, count(*) as `groupTotal`"))
                        ->whereRaw("MATCH(ManufacturerNameMatch, SubCategoryNameMatch, MainCategoryNameMatch, Model_Name, Title_Override, Description_Old) AGAINST ('$final' IN BOOLEAN MODE) AND Units_OnHand >= 1")

1 个答案:

答案 0 :(得分:2)

like运算符无法以这种方式找到您要查找的内容,因为连接的文本不包含Nikeon Ti-E子字符串。还有一个拼写错误,但这可能只会拼错在这里。

如果您想使用like '%Nikon% Ti-E%'运算符,则必须搜索like(请注意Nikon和Ti-E之间的额外%)。

使用全文搜索可能是更适合的解决方案。我会使用Boolean mode,您可以在其中指定两个单词应该在连接的内容中,以便出现在结果中。

... where match(ManufacturerNameMatch, SubCategoryNameMatch, MainCategoryNameMatch, Model_Name) against ('+Nikon +"Ti-E"' in boolean mode)