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