2

私は自分のウェブサイトの検索エンジンを作ろうとしています。索引付けされた単語のリストを保持するテーブルをどのように設計すればよいですか?

以前は、次のようなことを考えていました。

表:tbl_indexedwordsと の 2 つの列がiw_wordidありiw_wordます。

表: 、、、 のtbl_wordoccurrence4 つの列があります。wo_occurrenceidwo_wordidwo_pageidwo_numberofoccurrences

ユーザーが検索ボックスに 3 つ以上の単語を入力すると、このデザインはうまく機能しません。と仮定しfoo barます。foobarの両方が表tbl_indexedwordsにあり、対応する詳細が にある場合でも、私の検索エンジン スクリプトは、 またはのいずれかが最大になるtbl_wordoccurrence結果をランク付けします。単語の出現順序の列がないため、とが隣り合っているかどうかはわかりません。私がここで言っていることが明確であることを願っています。wo_numberofoccurrencesfoobarfoobar

tbl_wordoccurrence別のアイデアは、3 列のテーブルを作成することです。wo_numberofoccurencesunique を使用してページ内の各単語を忘れて保存しますwo_occurrenceid。これで、単語の出現順序がわかっているので、これで問題が解決します。wo_occurrenceidある単語が他の単語のwo_occurrenceid+1または-1である場合 wo_occurrenceid、これら2つは並んで発生します。

この設計の問題点は、多くのスペースを占めることです。私のウェブサイトにはたくさんのコンテンツがあります。このアプローチは遅くなると思います(確かではありませんが)。私に役立つ他のデザインはありますか?それとも、2番目のものを使用する必要がありますか? 最初のものは機能しないと確信しているので、破棄します。

4

1 に答える 1

3

あなたのウェブサイトのコンテンツがデータベース上にある場合(私は推測します)、FULLTEXTインデックスを使用している場合、別のテーブルを作成する必要さえありません。mySQL を使用している場合は、そのような機能があります。ここここの例を参照してください。また、MSSQL を使用している場合は、こちらこちらの例のような独自のFULLTEXTインデックス作成機能もあります。

また、検索用に別のテーブルがあると主張する場合は、次のようなテーブルが 1 つだけ必要になる可能性があります。

Table  : tbl_wordsoccurrence
Fields : words_id, words 
(and if you like you can include also number_of_occurences and page_id fields)

programming上の表では、 のような 1 つの単語または のようなフレーズを保存できますphp programming

一方、あなたのウェブサイトがstaticコンテンツがデータベースに保存されていないことを意味しているため、通常のユーザー入力ではなく手動で変更を加える必要がある場合、それは別の話です.

于 2013-06-12T04:19:26.820 に答える