sql >> データベース >  >> RDS >> Mysql

PHPおよびMySQLでSphinxを使用するためのガイド

    この投稿に出くわしましたが、見たい答えが見つかりませんでした。これが私のクイックスタートガイドです:

    1。 Sphinxをインストールする

    MacでHomebrewを使用する場合:

    brew install sphinx
    

    yumを使用するAmazonLinux(CentOS)の場合:

    yum install sphinx
    

    2。 Sphinx構成を作成する

    Sphinxには構成テンプレートが付属しています。 configsディレクトリでsphinx.conf.distを探します:

    HomebrewがインストールされているMacの場合:

    /usr/local/Cellar/sphinx/<sphinx version>/etc
    

    yumがインストールされているAmazonLinuxの場合:

    /etc/sphinx
    

    非常に簡単ですが、初心者には設定が多すぎる可能性があります。このような場合、次の簡単な構成を使用できます:

    source TestSource {
        type = mysql
        sql_host = <host>
        sql_user = <user>
        sql_pass = <password>
        sql_db = <db>
    
        sql_query_range = select min(id), max(id) from TestTable
        sql_range_step = 2048
    
        sql_query = select id, some_info from TestTable\
            where id >= $start and id <= $end
    }
    
    index TestIndex {
        source = TestSource
        path = /var/lib/sphinx/test-index
        min_word_len = 3
        min_infix_len = 3
    }
    
    searchd {
        log = /var/log/sphinx/searchd.log
        query_log = /var/log/sphinx/query.log
        pid_file = /var/run/searchd.pid
    
        max_matches = 200
    
        listen = localhost:9312
    }
    

    すべてが機能した後の最初の質問は「なぜ常に20の検索結果しか得られないのですか?」だったので、この構成にmax_matches設定を追加しました。 max_matchesを使用すると、検索結果数の制限を設定できます。

    3。インデクサーを使用してインデックスを作成する

    indexer --all
    

    4。 Sphinxデーモンを実行する

    sudo searchd -c /path/to/config/sphinx.conf
    

    5。 PHPSphinx拡張機能をインストールする

    MacでHomebrewを使用する場合:

    brew install homebrew/php/php56-sphinx
    

    yumを使用するAmazonLinuxの場合:

    yum install libsphinxclient
    pecl install sphinx
    

    6。 PHPからインデックスをクエリする

    $index = new SphinxClient();
    $index->setServer("127.0.0.1", 9312);
    
    $result = $index->query('some search term', 'TestIndex');
    
    print_r($result);
    

    エラーが発生した場合は、次の方法で詳細情報を取得できます。

    $index->getLastError();
    

    7。最新のインデックスを維持する

    最新のインデックスを維持するには、次の2つのインデックスを使用できます。

    1. 頻繁に更新されないメインインデックス(週に1回、月に1回など)
    2. そして、頻繁に更新されるデルタインデックス(1時間ごと、5分ごとなど)

    デルタインデックスが再インデックスされるたびに、メインインデックスとマージされます

    このリンクをたどる http://www.sphinxconsultant.com/sphinx-search-delta -インデックス作成/ このアプローチの詳細については、こちらをご覧ください。

    便利だと思ったリンク:



    1. Azureのギャップを埋める:マネージドインスタンス

    2. MySQLの単一引用符、二重引用符、逆引用符の使用法の説明

    3. MySQLは、チェック時にインデックスを使用しません=1ですが、=0で使用します

    4. RANK()を使用してSQLの行のランキング位置を追加する方法