MATCH()反對()/ FULLTEXT搜索是一個問題的快速修復 - 但是您的模式根本沒有意義 - 當然每篇文章中都有多個關鍵字?在只包含一個單詞的列上使用全文索引是相當愚蠢的。
,並保存所有的闖民宅的文章編號,以article_cloud
沒有!在一個列中存儲多個值是非常糟糕的做法。當這些價值觀是另一張桌子的鑰匙時,這是一種致命的罪惡!
它看起來像你有一個漫長的旅程前面你創造的東西,將有效地工作;實現目標的最快途徑可能是在您自己的數據上使用Google或Yahoo的索引服務。但如果你想自己修復它... ...
See this answer on creating a search engine - 關鍵字應該在一個單獨的表中,與您的文章有N:1的關係,關鍵字和文章ID的主鍵。
CREATE TABLE article (
id INTEGER NOT NULL autoincrement,
modified TIMESTAMP,
content TEXT
...
PRIMARY KEY (id)
);
CREATE TABLE keyword (
word VARCHAR(20),
article_id INTEGER, /* references article.id
relevance FLOAT DEFAULT 0.5, /* allow users to record relevance of keyword to article*/
PRIMARY KEY (word, article_id)
);
CREATE TEMPORARY TABLE search (
word VARCHAR(20),
PRIMARY KEY (word)
);
再拆由用戶輸入的話,將它們轉換成一致的情況下(與用於填充關鍵字表)和填充搜索表,然後找到使用火柴....
SELECT article.id, SUM(keyword.relevance)
FROM article, keyword, search
WHERE article.id=keyword.article_id
AND keyword.word=search.word
GROUP BY article_id
ORDER BY SUM(keyword.relevance) DESC
LIMIT 0,3
這將是一個很大更有效率,如果你能保持約的話不能按關鍵字用文字或規則的列表(例如忽略的3個字符或更少的混合或小寫將省略任何東西的話像'a','to','是','和','他'...)。
因爲它是一個樂器商店,所以有很多關鍵詞指的是大量的文章。我會嘗試,但事實是,我不知道關鍵字表格會變得多大。現在我節省了大約18k個關鍵字。如果我像你寫的那樣構造它,它可能會變成4到5倍大。但感謝這個想法,我肯定會給它一個,也許它比我的作品更好 –
第三次閱讀你的文章後,它變得越來越有意義。非常感謝您的幫助! –
我實現了它,它的速度有多快。從來沒有想過。非常感謝! –