誰もが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の全文検索によってデータベーススキーマが変更される可能性があります。