2012-04-10 8 views
-1

検索エンジン用に異なるテーブルを検索する際に、私に何をお勧めしますか?異なるテーブルに検索エンジンを作成する

各テーブルは異なるテーブルで、列が異なり、行数が異なります。

+0

あなたは[Solrの](http://lucene.apache.org/solr/)しようとしたことがありますか?あなたの要件に応じて、それは良い選択かもしれません – Anirudh

答えて

0

対応するテーブルのトリガを作成して、異なるテーブルから単一のテーブルにコンテンツをフェッチします。そのテーブルに対してフルテキスト検索インデックスを適用します。

0

列名とテーブル名を動的に入力する関数を作成します。検索目的のために、どの列がどのテーブルに関連しているかを知っていて、次にこれらの2つのパラメータを常に1)table_name 2)column_names配列に渡す必要があります。これらのパラメータが適合し、クエリが動的に開発される条件でSQLクエリを作成します。クエリは結果を返します。

0

この場合、FULL-TEXTインデックスメカニズムを使用していることを確認してください。 FULL-TEXTインデックスはMyISAMテーブルENGINEタイプでサポートされています。

Full-text MATCH()... AGAINST構文を使用して検索が実行されます。 MATCH()は、検索する列の名前をカンマ区切りのリストで指定します。 AGAINSTは検索する文字列と、実行する検索のタイプ​​を示すオプションの修飾子を取ります。検索文字列は、変数または列名ではなく、リテラル文字列でなければなりません。全文検索の3種類があります。

  • 自然言語検索が 人間の自然言語でのフレーズ(フリーテキストでフレーズ)として検索文字列を解釈します。特別な 演算子はありません。ストップワードのリストが適用されます。さらに、行の50%以上に存在する という単語は共通とみなされ、 は一致しません。

    IN NATURAL LANGUAGE MODE修飾子が指定されている場合、または修飾子が指定されていない場合、全文検索は自然言語検索です。

  • ブール検索は、特別なクエリ言語のルールを使用して検索文字列を解釈します。文字列には検索する単語が含まれています。 ワードが一致する行に存在する必要があるか、一致する行に存在しないか、または の重みが通常よりも大きくまたは低くなるような要件を指定する演算子を含めることもできます。 "some"や "then"のような一般的な単語はストップワードであり、検索に存在する場合は一致しません 文字列。 IN BOOLEAN MODE修飾子はブール検索を指定します。 詳細については、項12.9.2。「ブールフルテキスト検索」を参照してください。

  • クエリ拡張検索は、自然言語検索の変更です。検索文字列は、自然言語を実行するために使用されます 検索。その後、検索で返された最も関連性の高い行からの単語が検索文字列に追加され、検索がもう一度行われます。 クエリは、2番目の検索から行を返します。

より多くの情報がこれを参照してください:

http://devzone.zend.com/26/using-mysql-full-text-searching/

http://www.iamcal.com/publish/articles/php/search/

関連する問題