[英]mysql match against ~ example
下面是我堅持使用的一個 sql 示例,它不會返回名為“mill hotel”的酒店,而是返回 10 家其他酒店。 任何幫助都會非常感謝
SELECT * FROM tbl WHERE match(hotel) against('the mill hotel' IN BOOLEAN MODE) LIMIT 10";
您需要指定運算符,因為在 OR 運算中未指定任何結果。 試試這個:
SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";
您始終可以使用引號來匹配短語mill hotel
而不是單詞mill
和/或hotel
:
SELECT * FROM tbl WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE) LIMIT 10;
或者,簡單地說:
SELECT * FROM tbl WHERE match(hotel) against('"mill hotel"' IN BOOLEAN MODE) LIMIT 10;
我相信所有
SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10;
do 是需要匹配單詞the
,將mill
和hotel
留作可選:如果你想要求整個短語,它需要用引號引起來:
SELECT * FROM tbl WHERE match(hotel) against('+"the mill hotel"' IN BOOLEAN MODE) LIMIT 10;
盡管當您只有一個搜索詞組時,如本例所示,加號是多余的。
12.9.2 布爾全文搜索
MySQL 可以使用 IN BOOLEAN MODE 修飾符執行布爾全文搜索。
布爾全文搜索具有以下特點:
12.9.1 自然語言全文搜索
默認情況下或使用 IN NATURAL LANGUAGE MODE 修飾符,MATCH() 函數針對文本集合對字符串執行自然語言搜索。 集合是包含在 FULLTEXT 索引中的一組一個或多個列。 搜索字符串作為 AGAINST() 的參數給出。 對於表中的每一行,MATCH() 返回一個相關值; 也就是說,搜索字符串與 MATCH() 列表中命名的列中該行中的文本之間的相似性度量。
因此,您需要對它們進行排序或取消對結果的限制。
根據 PHP 中的短語執行以下 mysql 查詢
SELECT *
FROM tbl
WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE)
你必須這樣做:
$phrase = "the mill hotel";
$phrase= '"'.$phrase.'"'; // Adds quotes around string
$stmt = $db->prepare('SELECT * FROM tbl WHERE MATCH(hotel) AGAINST(:phrase )');
$stmt->bindParam(':phrase ', $phrase , PDO::PARAM_STR);
$stmt->execute();
感謝@ub3rst4r 的回答: 為 PDO 准備好的語句強制精確字符串匹配
在這種情況下使用+ (plus)
...
SELECT * FROM tbl WHERE match(hotel) against ('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";
閱讀本文了解詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.