当用户搜索我知道的内容在广告资源中时,在我的广告资源中查找商品时遇到了一些问题。
表列是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")
答案 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)