1

ユーザー検索/自動完了機能を提供するために、MySQLとSphinxを使用してユーザー名の全文検索を提供しようとしています。

私はsphinxphpapiを使用してすべてをセットアップし、次のコードで返されるユーザーIDのリストを取得することができました。

include('/usr/local/lib/php/sphinxapi.php');

  $sphinx = new \SphinxClient();
  $mysqlconn = mysql_connect("127.0.0.1:9306") or die ("Couldn't connect to MySQL.");
  $results = $sphinx->Query("John", "users");

  $ids = "";
        foreach($results['matches'] as $id => $data) {
             if($ids > ""){
                     $ids .= ",";
             }
            $ids .= $id;
        }


    echo json_encode($ids);

これにより、ファーストネーム列またはラストネーム列のいずれかに「John」という単語が含まれるユーザーIDのコンマ区切りリストが返されます。

このアプローチを採用すると、実際のmysqlデータベースにクエリを実行し、それらのIDに一致するユーザーを引き出す必要があります。

私の質問は、これを行うための最も効率的な方法は何でしょうか?句付きの単純なselectを使用する必要IN()がありますか、それともはるかに優れた方法がありますか?

また、Sphinxは、より効率的な方法でこのデータを自動的に返すことはできませんか?

前もって感謝します

4

2 に答える 2

1

うん、スフィンクスを使用する場合は、mysqlデータベースを個別に再度クエリする必要があります...あるデータベースでキーを検索し、それを別のDBで使用します。それを回避する方法はありません。イエローページを使用して電話番号を見つけるようなものですが、その人と話すには、電話の番号をダイヤルする必要があります。2つのDB間で結合を構築する方法はありません(ラッパーライブラリを作成して、そうしているように見せること以外は)。

でも....

あなたが持っているオプションは、DBをMariaDBに変換することです(MySQLの代わりにドロップイン)。5.2.2の時点で、ストレージエンジンとしてsphinxと統合されています:https ://kb.askmonty.org/en/about-sphinxse/2941/

于 2012-10-11T14:01:10.573 に答える
1

これはSphinxFAQページの最初の質問です:)

http://sphinxsearch.com/info/faq/#row-storage

私は通常、mysqlではなくアプリケーションで「ソート」を行う方が効率的だと思います。連想配列を使用すると、ソートフェーズを完全に回避できます。ここでその手法を使用した例:http: //www.nearby.org.uk/sphinx/search-example5-withcomments.phps

于 2012-10-11T15:54:39.967 に答える