2017-07-13 13 views
0

シンプルな質問でなければならないことを私に許してください。しかし、私はスフィンクスにとって全く新しいものです。シンプルなSphinx&mySQLクエリ

私は、mySQLデータストアでSphinxを使用しています。表は、Sphinxによって索引付けされた「タイトル」および「コンテンツ」フィールドで次のようになります。

CREATE TABLE `documents` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `group_id` int(11) NOT NULL, 
    `group_id2` int(11) NOT NULL, 
    `date_added` datetime NOT NULL, 
    `title` varchar(255) NOT NULL, 
    `content` text NOT NULL, 
    `url` varchar(255) NOT NULL, 
    `links` int(11) NOT NULL, 
    `hosts` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `url` (`url`) 
) ENGINE=InnoDB AUTO_INCREMENT=439043 DEFAULT CHARSET=latin1 

私は

mysql -h0 -P9306 

とスフィンクスを介して接続する場合さて、私は単純なクエリなどを実行することができます...

SELECT * FROM test1 WHERE MATCH('test document'); 

そして、私のような結果セットを取り戻すだろう。.. 。

+--------+----------+------------+ 
| id  | group_id | date_added | 
+--------+----------+------------+ 
| 360625 |  1 | 1499727792 | 
| 362257 |  1 | 1499727807 | 
| 362777 |  1 | 1499727811 | 
| 159717 |  1 | 1499717614 | 
| 160557 |  1 | 1499717621 | 
---------------------------------- 

私が実際に望むものはドキュメントテーブル(URL、タイトル、リンク、ホストなどの列のような)から列値を含む結果セットを返し、可能であれば、これらをスフィンクスマッチの関連性でソートします。

これを1回のクエリで実行できますか?どのように見えますか?

ありがとうございます!

答えて

1

つ(メイン)オプション

  1. 、非常に迅速でなければなりませんSphinxQL結果からid秒を取り、完全な詳細情報を取得するためにMySQLのクエリを実行し、このMySQLのクエリhttp://sphinxsearch.com/info/faq/#row-storage 例えばSELECT * FROM documents WHERE id IN (3,5,7) ORDER BY FIELD(id,3,5,7) を見ますそれはPKルックアップであり、いくつかの行(つまり1ページの結果)しか取得しないため、最初のSphinxクエリでテーブル全体を検索する作業が既に行われています。

  2. 結果セットで取得するすべての列を複製して属性とします。 がすでにになっており、属性としてgroup_iddate_addedとなっています。属性を増やす必要があります。

    sql_field_stringフィールド 1列から文字列の属性の両方を作るために非常に便利なショートカットです。他の列型では使用できませんが、数値列としてはあまり役に立ちませんが、通常はフィールドとしては必要ありません。大きなデータセット上で最も現実的 -

オプション1(スフィンクスは、典型的には、メモリ内の属性を保持したい)、それはデータを複製避けるには良好で、メモリを節約できます。

ですが、オプション2は各結果の2番目のクエリを避ける点で優れています。しかし、データのコピーを持っているため、複雑な同期が追加される可能性があります。

  • あなたのケースでは適切ではありませんが、「クリック」列がある場合は、頻繁に増分したい(ユーザーがクリックすると)、結果セットに必要ですが、それはクエリの目的のためのスフィンクスで、最初のオプションは、あなたがデータベースでそれをインクリメントする必要があり、mysqlクエリは常にライブ値を取得することができます。しかし、2番目のオプションは、常に「同期」のスフィンクスインデックスを維持する必要があることを意味します)
関連する問題