sql >> データベース >  >> RDS >> Mysql

phpとmySQLを使用して簡単なサイト検索を実装するにはどうすればよいですか?

    誰もがMySQL全文検索を提案していますが、大きな警告に注意する必要があります。全文検索エンジンは、MyISAMエンジンでのみ使用できます(参照整合性とACID準拠のために最も一般的に使用されるエンジンであるInnoDBは使用できません)。

    したがって、いくつかのオプションがあります:

    1。 最も単純なアプローチは、パーティクルツリー によって概説されています。 。純粋なSQLからランク付けされた検索を実際に取得できます(フルテキストなし、なし)。以下のSQLクエリは、テーブルを検索し、検索フィールドでの文字列の出現回数に基づいて結果をランク付けします。

    SELECT
        SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
            ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
        AS Occurrences
    FROM
        posts AS p
    GROUP BY
        p.id
    ORDER BY
        Occurrences DESC
    

    もう少し明確にするために例を編集しました

    上記のSQLクエリのバリエーション、WHEREステートメント(WHERE p.body LIKE'%whatever%you%want')の追加などにより、必要なものが正確に得られる可能性があります。

    2。 全文をサポートするようにデータベーススキーマを変更できます。多くの場合、Sphinx全文検索エンジンなどのプラグインをインストールせずにInnoDBの参照整合性、ACID準拠、速度を維持するために行われること MySQLの場合、見積もりデータを独自のテーブルに分割します。基本的に、InnoDBテーブルであるQuotesテーブルがあり、TEXTフィールド「data」ではなく、MyISAMテーブルであるQuote_DataテーブルのIDを指す参照「quote_data_id」があります。 MyISAMテーブルで全文を実行し、InnoDBテーブルで返されたIDを結合して、結果を得ることができます。

    3。 Sphinx をインストールします 。これで頑張ってください。

    あなたが説明したことを考えると、私は非常に あなたは単純なデータベース主導のサイトを持っているので、私が提示した最初のアプローチを取ることをお勧めします。最初の解決策は単純で、仕事をすばやく終わらせます。 Luceneは主にデータベースではなくファイルにインデックスを付けるように設計されているため、Luceneをデータベースと統合する場合は特に、Luceneをセットアップするのは面倒です。 Googleのカスタムサイト検索では、サイトの評判が大幅に低下し(素人っぽく、ハッキングされたように見えます)、MySQLの全文検索によってデータベーススキーマが変更される可能性があります。



    1. T-SQLを使用して、サブ文字列の最後の出現のインデックスを検索します

    2. MYSQLを使用してランダムな数を作成する

    3. PL / SQL ORA-01422:正確なフェッチが要求された数を超える行を返します

    4. MySQLクライアントのデフォルトのポケットベルをどのように設定しますか?