2

すべてのコンテンツ (または少なくとも検索可能なコンテンツ) がデータベースに保存される Web サイトのサイト全体の検索を構築したいと考えています。あまり関与せずにこれを行うと私が考えることができる最良の方法は次のとおりです。

  1. ユーザーが検索クエリ「茶色の革のソファ」を入力します。
  2. クエリを配列に分割します。
  3. 配列の各行に対して LIKE %$val% を使用してデータベース (mysql) を検索します。
  4. 結果を配列にロードし、コンテンツで見つかった検索語の数に対して各結果に +1 ポイントを与えます。
  5. 検索結果に一致する用語が含まれている場合は、特定のページの閲覧数 (人気の指標) で並べ替えます。

ページ タイトルの検索用語を使用して結果の価値を高めたり、ユーザーが引用符を使用して複数の単語のフレーズを検索できるようにするなどの実装は、それほど複雑ではありません。

返される結果の制限、キャッシュなどのパフォーマンスに関する考慮事項は別として、他に考慮する必要があること、またはこれにアプローチするためのより良い方法はありますか (Google 検索ボックスの実装は別として)。

4

2 に答える 2

1

非常に関与するためのしきい値が何であるかはわかりませんが、最初に文字列の配列全体を含む一致を検索してから、説明したメソッドを呼び出します.

考慮してください: 別々の結果として返される 2 つのコンテンツ。

結果 1:

____ brown ____ ____ _____ ____ brown ____ ____ ______ ___ brown _____ ____ brown

結果 2:

brown leather sofas _____ _____ ______ ____ _____.

結果 2 を一番上の結果として返したいのは明らかですが、メソッドは結果 1 により多くの「ポイント」を割り当てます。

于 2012-06-28T14:10:26.693 に答える
0

全文検索を検討したことがありますか? すべての場合に適しているわけではありませんが、この種の問題には役立ちます。

SELECT * 
FROM articles
WHERE MATCH (title, body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);

ただし、新しいユーザーを獲得するための興味深い落とし穴がいくつかあるため、必ずドキュメントを読んでください。次に例を示します。

テーブルを作成し、そこに 1 行または 2 行のテキストのみを挿入すると、テキスト内のすべての単語が少なくとも 50% の行に含まれます。その結果、検索で結果が返されません。少なくとも 3 行、できればそれ以上の行を挿入してください。

于 2012-06-28T14:23:20.240 に答える