0

Web ページ内のすべての単語をスキャンするクローラーがあります。次に、各単語をその単語が属する URL とともに mysql データベースに挿入します。検索は、ドキュメント内で見つかった単語の量によってランク付けされます。問題は...既存のクエリに複数の用語クエリを追加する方法です。

単一の用語のクエリには最適ですが、クエリで同じ Web ページ内の単語をまとめて検索し、どちらの単語も Web ページに表示されない場合は、通常どおり用語の結果を返します。

私のクエリは以下の通りです:

         $results = addslashes( $_POST['results'] );

               " SELECT p.page_url AS url,
                       COUNT(*) AS occurrences 
                       FROM page p, word w, occurrence o
                       WHERE p.page_id = o.page_id AND
                       w.word_id = o.word_id AND
                       w.word_word = \"$keyword\"
                       GROUP BY p.page_id
                       ORDER BY occurrences DESC
                       LIMIT $results"
4

2 に答える 2

0

COUNT(DISTINCT ...)各ページで見つかったさまざまな単語の数をカウントするために使用しIN、単語のリストのいずれかを見つけるために使用します。

SELECT
    p.page_url AS url,
    COUNT(DISTINCT w.word_word) AS words_found
    COUNT(*) AS occurrences 
FROM page p
JOIN occurrence o ON p.page_id = o.page_id
JOIN word w ON w.word_id = o.word_id
WHERE w.word_word IN ('foo', 'bar')
GROUP BY p.page_id
ORDER BY occurrences DESC

少なくとも n 個の検索語がページに含まれるようにする場合は、HAVING 句を追加します。

GROUP BY p.page_id
HAVING COUNT(DISTINCT w.word_word) >= 2
ORDER BY occurrences DESC
于 2012-11-24T16:59:09.013 に答える
0

DB エンジンがサポートしている場合は、サブセレクトを実行できます。例:

SELECT 
  url, 
  (select count(*) from table where conditions1) as count1, 
  (select count(*) from table where conditions2) as count2 
 FROM table
于 2012-11-24T17:00:12.393 に答える