ただし、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 に接続できない理由
わからない。ファイアウォールの問題である可能性があります。