就像用戶在輸入字段中輸入文章標題一樣,我想搜索現有文章以查看是否有類似內容。SQL搜索查詢像stackoverflow
例如,
SQL search query like stackoverflow
我想找到與本書相關的最相關的文章。
我知道它是這樣的:
WHERE article_title LIKE 'word'
,但我怎麼處理多個關鍵字?
就像用戶在輸入字段中輸入文章標題一樣,我想搜索現有文章以查看是否有類似內容。SQL搜索查詢像stackoverflow
例如,
SQL search query like stackoverflow
我想找到與本書相關的最相關的文章。
我知道它是這樣的:
WHERE article_title LIKE 'word'
,但我怎麼處理多個關鍵字?
使用全文索引 '字1' 和 '單詞2' 中的所有行,which'd是這樣的:
SELECT ... FROM ... WHERE MATCH (fieldname) AGAINST ('keyword keyword keyword');
或者破解查詢看起來像
SELECT ... FROM ... WHERE (fieldname LIKE '%keyword%' OR fieldname LIKE '%keyword%' etc...)
這兩個,t他的全文版本會更快,因爲它可以使用索引。 'LIKE %...%
版本將非常昂貴,因爲該類型的通配符搜索根本無法使用索引。缺點是全文索引只能在MyISAM表上使用,並且可能永遠不會用於InnoDB表。
WHERE article_title LIKE '%word1%word2%'
將返回在ARTICLE_TITLE包含在這個特定的順序
您需要進行全文搜索。
確保您使用MyISAM作爲您要搜索的表的引擎。
有以下表
Table articles
--------------
id integer autoincrement PK
title varchar(255) with fulltext index
contents textblob with fulltext index
,並使用查詢,如:
SELECT id
, MATCH(title, contents) AGAINST ('$title_of_article_thats_being_edited')
as relevance
FROM articles
WHERE MATCH(title, contents) AGAINST ('$title_of_article_thats_being_edited')
ORDER BY relevance
注意,SO提煉當你進入標記列表。
嗯該領域沒有全文,我發現我可以添加它'CREATE INDEX fulltext2 ON articles(article_title(255));'謝謝 – Emma
提及通配符類查詢的性能殺死性質的榮譽。他們根本不能很好地擴展。 – paxdiablo