6

MySQL サーバーで Sphinx 全文検索機能を使用しようとしています。インストールマニュアルに基づいてローカル Sphinx サービスをセットアップし、テキスト検索を実行できます。

に接続できます

mysql.exe --host=127.0.0.1 port=9306

portはsphinx.conf9306で設定されたポートです:

searchd {
...
listen = 9306:mysql41
...
}

そしてSphinxQLクエリを実行します。リリース パッケージに同梱されているデフォルトの Sphinx サンプル データベースを使用しています。

ただし、SQL サーバーに接続するすべてのクライアントが SphinxQL を実行できるように、Sphinx を MySQL サーバーと統合し、MySQL サンプル データベースsakilaで試してみたいと考えています。

  • それを達成するための手順は何ですか?
  • データベース エンジンを InnoDB から Sphinx に変換する必要がありますか?
  • また、Sphinx は構成ごとに 1 つのデータベース テーブルしかインデックス付けできないようですが、MySQL データベース内のすべてのテーブルがインデックス化されるようにするにはどうすればよいですか?
4

1 に答える 1

13

ただし、SQL サーバーに接続しているすべてのクライアントが SphinxQL を実行できるように、Sphinx を MySQL サーバーと統合したいと考えています。

それはできません。Sphinx (sphinxQL が有効になっている場合) は、mysql のように見えるサーバーを提供するだけです。つまり、同じ通信プロトコルを使用します。主に、sphinx のためだけに新しいものを作成するのではなく、mysql クライアント ライブラリを再利用できます。

それらは異なる「サーバー」です。mysql サーバーに接続して mysql コマンドを実行します。sphinx サーバーに接続して sphinxQL コマンドを実行します。

アプリケーションは、各「サーバー」に個別に接続する必要があります。sphinx が postgres のようなものだったと想像してみてください。明らかに mysql に接続せず、postgresql を実行できることを期待しています。

ただし、偽の mysql ストレージ エンジンである SphinxSE があります。これを mysql にインストールすると、このエンジンを使用してテーブルを作成できます。次に、このテーブルに対して mysql クエリを実行します。フードの下には、実行中の sphinx サーバーへの連絡先があります。したがって、mysql には、データを含むテーブルのように見えます。これは、この検索テーブルを元のデータ テーブルと「結合」して、1 つの mysql クエリで結果と元のデータを取得できるため、最も便利です。

その後、アプリケーションは sphinx 自体に接続する必要はありません。SphinxSE がそれを行います。

http://sphinxsearch.com/docs/current.html#sphinxse

データベース エンジンを InnoDB から Sphinx に変換する必要がありますか?

いいえ。好きなエンジンを使用して、元のデータをそのまま保持します。Sphinx は「インデックス」を提供するだけで、元のデータは保存しません*。それ自体はデータベースではなく、高度に最適化されたインデックス作成による高速クエリを提供するだけです。

基本的に、特定のクエリに一致するドキュメントの一意の ID を sphinx に要求します。次に、それらの ID を使用してデータを検索します。SphinxAPI、sphinxSE、および sphinxQL は、それを行うための 3 つの異なるメカニズムです。

また、どうやら、Sphinx は構成ごとに 1 つのデータベース テーブルしかインデックス化できないようです。

いいえ。1 つの Sphinx インスタンスで多数のインデックスをホストできます。また、インデックスには多くのソースを含めることができます。したがって、テーブルごとに 1 つのインデックスを作成できます。または、主にそれらをまとめて検索したい場合は、1 つの統合インデックスを作成するだけで済みます。

-- ** コメントで質問に返信するように編集: **

そうは言っても、sphinx は多くのインデックスをホストできますが、それは sphinx.conf 構成ファイルだけに依存しているのでしょうか?

テーブルごとに 1 つの Sphinx インデックスを定義することになるでしょう。したがって、テーブルごとにソースとインデックスのペアが必要になります。(1 つのインデックスですべてのテーブルにインデックスを付けたい場合を除き、これも可能です。

テーブル自体を読み取ったり、構成ファイルを作成したりすることはできません。各インデックスを個別に定義する必要があります。

「mysql のように見えるサーバーを提供する」と言うとき、プロキシのようなものを意味しますか?

いいえ、プロキシではありません。

私のMySQLクライアントはこのSphinxポートに接続でき、クライアントはそれがMySQLサーバーであると考えるでしょうか?

基本的にはい。クライアントは、mysql サーバーに接続するのと同じ方法で接続します。

 もしそうなら、同じ接続で MySQL SQL クエリと SphinxQL の両方を実行できますか?

いいえ、不可能です。mysql-server に接続して、mysql クエリを実行します。searchd に接続して、sphinxQL クエリを実行します。

サーバーごとに 1 つずつ、2 つの接続。

MySQL Workbench がポート 9306 に接続できない理由

わからない。ファイアウォールの問題である可能性があります。

于 2012-07-28T14:48:31.180 に答える