2011-01-05 9 views
0

私はmysqlデータベースを設計しています。検索のためにブログ/記事データを保存する効率的な方法についていくつかご意見をお待ちしています。Mysqlの検索デザイン

今は、検索対象のコンテンツを格納する別の列を作成しました。重複する単語はなく、4文字より短い単語も、あまり一般的でない単語もありません。基本的には、元の記事のキーワードリストです。また、タグのリストとタイトルフィールドが検索されます。

mysqlが全文索引をどのように索引付けしているかわからないので、そのようなデータを格納するのは効果がないか、何とか冗長になりますか?多くの記事が同じトピックにあるので、同様のキーワードを持つ非常に多くの行がスコアを上げるでしょうか?

また、このプロジェクトでは、スフィンクス、lucene、またはgoogleカスタムseachのようなソリューションは使用できません - PHP & mysqlのみ。

ありがとうございます!

EDIT - 私は明確にしましょう:基本的に

を、私は聞いてるのよ最速、最も関連性の高い結果を提供することになる方法全文:すべてデータに検索語の多くのインスタンスを見つけることによって、 、またはちょうどの単一のキーワード他の単語の間で。

私は、必要なものの上に別のキーワードテーブルがあると思うので、記事のキーワード列と検索を忘れたり、各行のキーワードを選択し続ける必要がありますか?

+0

フルテキスト検索、たくさんの例を使用してください! – ajreal

+0

ほぼ同じ質問http://stackoverflow.com/questions/553055/best-full-text-search-for-mysql – FDisk

+0

はい、私はその質問を見ましたが、それは本当に私が求めていたものに答えなかったので、私は明確にするために私の質問を編集しました。 – neil

答えて

1

あなたは別のテーブルに単語リスト(あなたが指定したルールに従って)を構築し、出現数と一緒に参加し、テーブル内の各記事で、それをマップする必要があります。

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

これで、結合テーブルをスキャンして、単語の出現によって記事をランク付けすることもできます。おそらく、検索クエリ文字列に単語が入力された順序を重要視します。

もちろん、これは非常に学術的な解決策です。あなたのプロジェクトが必要としているものはわかりませんが、FULLTEXTのインデックス作成は非常に強力で、実際の状況ではFULLTEXTインデックスを使用する方が良いでしょう。

HTH。

+0

あなたのテーブルのタイプはmyIsamである必要があります。あなたの結合に依存して良い解決策ですが、時にはクエリを少し遅くすることがあります。私は、あなたのシステムを遅くする問題のある結合を使用している例がたくさんあります。結合を使用する場合は注意してください。検索エンジンの一種として、より洗練されたものにする必要があると思います... – B4NZ41