0

特定のキーワードで始まるドメインを一覧表示するスフィンクス クエリを作成しようとしています。

次の項目を含むスフィンクス インデックスがあるとします。

stack.com
stack-it.com
stack.net
stack-studio.com
stackoverflow.com
stackmonkey.com

次のクエリ

$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );
$cl->SetFieldWeights ( array ( "site_domain"=>100 ) );
$cl->SetSortMode ( SPH_SORT_EXTENDED  , "@weight DESC" );
$cl->SetLimits(0, 100);
$cl->AddQuery( '^stack', "domainsDb" );

リストのみ:

stack.com
stack-it.com
stack.net
stack-studio.com

. で終わる結果が見つかると、. また -。しかしstackoverflow.com、完全一致ではないため、表示されていませんか?「クエリ」で始まるすべての結果を表示するにはどうすればよいですか? 言葉の一部であっても。

4

2 に答える 2

2

スター オプション (http://sphinxsearch.com/docs/1.10/conf-enable-star.html) を有効にし、探しているキーワードの後に​​ * を追加する必要があります。

$cl->AddQuery( '^stack*, "domainsDb" );

また、最小限のインフィックス長を設定することを忘れないでください (http://sphinxsearch.com/docs/1.10/conf-min-infix-len.html)

全文検索に MySQL を使用することは、あまりお勧めできません。

1) FT インデックスを使用した全文検索は、sphinx/solr に比べて遅い

2) FT インデックスを使用しない全文検索は非常に遅く、DB サーバーの 100% を非常に迅速に利用でき、トラフィックが非常に少ない場合でも使用できなくなります。

3) FT インデックスを持つことができるようにするには、Innodb ではなく、MyISAM エンジンを使用する必要があります。一方、Innodb にはいくつかの欠点があります。

于 2012-11-11T13:09:58.080 に答える
0

この場合、Sphinx は必要ないことがわかりました。

MySQL だけでも、VARCHAR フィールドでこのようなクエリを実行するには十分高速です。

SELECT * FROM domain WHERE domain LIKE '$search_term%'

100 万以上のレコードでも超高速で実行されます。

于 2012-11-11T10:31:50.303 に答える