私は自分のウェブサイトの検索エンジンを作ろうとしています。索引付けされた単語のリストを保持するテーブルをどのように設計すればよいですか?
以前は、次のようなことを考えていました。
表:tbl_indexedwordsと の 2 つの列がiw_wordidありiw_wordます。
表: 、、、 のtbl_wordoccurrence4 つの列があります。wo_occurrenceidwo_wordidwo_pageidwo_numberofoccurrences
ユーザーが検索ボックスに 3 つ以上の単語を入力すると、このデザインはうまく機能しません。と仮定しfoo barます。fooとbarの両方が表tbl_indexedwordsにあり、対応する詳細が にある場合でも、私の検索エンジン スクリプトは、 またはのいずれかが最大になるtbl_wordoccurrence結果をランク付けします。単語の出現順序の列がないため、とが隣り合っているかどうかはわかりません。私がここで言っていることが明確であることを願っています。wo_numberofoccurrencesfoobarfoobar
tbl_wordoccurrence別のアイデアは、3 列のテーブルを作成することです。wo_numberofoccurencesunique を使用してページ内の各単語を忘れて保存しますwo_occurrenceid。これで、単語の出現順序がわかっているので、これで問題が解決します。wo_occurrenceidある単語が他の単語のwo_occurrenceid+1または-1である場合 wo_occurrenceid、これら2つは並んで発生します。
この設計の問題点は、多くのスペースを占めることです。私のウェブサイトにはたくさんのコンテンツがあります。このアプローチは遅くなると思います(確かではありませんが)。私に役立つ他のデザインはありますか?それとも、2番目のものを使用する必要がありますか? 最初のものは機能しないと確信しているので、破棄します。