2011-01-05 81 views
0

我正在設計一個mysql數據庫,我想用一種有效的方式存儲用於搜索的博客/文章數據。Mysql搜索設計

現在,我已經創建了一個單獨的專欄,用於存儲要搜索的內容 - 沒有重複的單詞,沒有短於四個字母的單詞,也沒有太常見的單詞。所以,基本上,這是來自原始文章的關鍵字列表。還搜索將是標籤列表和標題字段。

我不太確定mysql如何索引全文列,那麼將存儲數據如無效,或多餘的?很多文章都在同一主題上,所以很多具有相似關鍵字的行都會傷害評分。

此外,對於這個項目,解決方案像獅身人面像,lucene或谷歌自定義搜索不能使用 - 只有php & mysql。

謝謝!

編輯 - 讓我澄清一下:

基本上,我要問哪種方式全文將提供最快,最相關的結果:在所有的數據中尋找搜索詞的許多情況下, ,或者僅僅是中的單個關鍵字等少數幾個詞。

我認爲一個單獨的關鍵字表會超過我需要的頂部,所以我應該忘記關鍵字列和搜索文章,或繼續爲每一行選擇關鍵字?

+0

使用全文搜索,大量的例子! – ajreal 2011-01-05 18:54:36

+0

幾乎相同的問題http://stackoverflow.com/questions/553055/best-full-text-search-for-mysql – FDisk 2011-01-05 19:51:56

+0

是的,我看到了這個問題,但它並沒有真正回答我所問的,所以我編輯我的問題澄清。 – neil 2011-01-05 19:57:49

回答

1

你應該建立單詞列表(根據您指定的規則)在一個單獨的表,然後將其映射到一個連接表每一篇文章,與出現的次數一起:

words: id | name 
articles: id | title | content 
articles_words: id | article_id | word_id | occurrences 

現在,您可以掃描連接表,甚至可以根據該詞的出現對文章進行排名,並且可能會將重點放在搜索查詢字符串中輸入詞的順序上。

當然,這是一個非常理想的解決方案。我不確定你的項目需要什麼,但是FULLTEXT索引功能非常強大,而且在大多數實際情況下你總是更好地使用它。

HTH。

+0

您的表類型需要是myIsam,取決於您的連接是一個很好的解決方案,但有時會使您的查詢有點慢。我有很多使用有問題的連接的例子,這會讓你的系統變慢。使用連接時要小心。一種搜索引擎,我認爲它需要更多的東西...... – B4NZ41 2011-01-05 19:55:58