簡體   English   中英

mysql 匹配 ~ 示例

[英]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 ,將millhotel留作可選:如果你想要求整個短語,它需要用引號引起來:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM