2011-12-20 15 views
0

私は5つのドキュメントを行として、2つのカラム 'document'と 'description'をmySQLテーブルに持っています。キーワードの検索とランクの結果

  • ドキュメント1:JohnとNancyは親友です。
  • ドキュメント2:John、Casey、David、Nancyは親友です。
  • ドキュメント3:NancyとCaseyは親友です。
  • ドキュメント4:DavidはCaseyと関係しています。デイヴィッドとケーシーは狂って恋に落ちている。
  • ドキュメント5:DavidとJohnは兄弟です。
  • したがって、検索クエリが「David Casey」の場合、5つのドキュメントすべての用語頻度に基づいてクエリを計算し、その頻度に基づいて結果をランク付けする方法。

  • 文献2(1 'デビッド及び1(2 'デビッド' および2 'ケーシー' が存在するため)

    • 文献4:

      この場合、結果は次のようでなければなりません'ケーシー')

    • 文献3(1 'ケーシー')
    • 文献5(1 'デビッド・')

    私は多くのTF-IDFの記事を読みましたが、それらのどれも私を助けることはできません。私はコードを書く方法について考えていません。

    これは私の現在のコードです:

    $ searchCondition = "説明LIKE「%"。 implode( "% 'OR LIKE'% '、$ searchTerms)。 "% '";

    $クエリ= "WHERE説明ASC BY $ searchCondition ORDER TABLE1 FROM SELECT記述"。

    $結果= mysqli_query($のDBC、$クエリ);

    ...

    ...

    ...

  • +0

    ようこそ!さて、あなたのコードには、修正すべき[SQLインジェクション](http://php.net/manual/en/security.database.sql-injection.php)脆弱性が含まれています。 –

    +0

    MySQLのフルテキスト検索機能を調べましたか?http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html – liquorvicar

    +0

    既に、私はまだ考えていません。 :/ – Fhzwn

    答えて

    0

    これは確かに動作します:

    $searchCondition = "description LIKE '%" . implode("%' OR description LIKE '%", $searchTerms) . "%'"; 
    $orderCondition = array(); 
    foreach ($searchTerms as $word) { 
        $orderCondition[] = "(length(description)-length(replace(description,\"".$word."\",\"\")))/length(\"".$word."\")"; 
    } 
    $orderConditionString = "(".implode(" + ", $orderCondition).")"; 
    
    $query = "SELECT description FROM table1 WHERE $searchCondition ORDER BY $orderConditionString DESC"; 
    

    データベースから項目を降順に、次にソートされています。したがって、最も関連性の高いものが最初の場所になります。

    注:これはキーワードの数が少ない場合にのみ有効です。各キーワードの長さは3回チェックしています。だから大きなテーブルとより多くのキーワードでの応答時間は少し違うでしょう;)

    +1

    ありがとう@AndVla、コーディングが動作しています!しかし、その結果は、私が最初の投稿で言及したものとしてランクされていませんでした。あなたは何か考えていますか? – Fhzwn

    +0

    result-queryのデータベースから各行のランクを取得しますか? – AndVla

    +1

    はい、あなたのコードを私のPHPに実装したところ、結果は2,4,5,3です。結果は、私の質問によると、4,2,3,5になるはずです: "David Casey"。私はこれをどのように処理するのだろうか。 – Fhzwn

    関連する問題