検索

Sphinx全文検索PHP使い方講座 全文検索のための PHP 使用チュートリアル
Sphinx全文検索PHP使い方講座
例として、前の記事のメール データ テーブルを取り上げます。

データ構造:


ソースプリントを表示しますか?
01.CREATE TABLE email (
02.emailid mediumint(8) unsigned NOT NULL auto_increment COMMENT '邮件id',
03.
04.fromid int(10) unsigned NOT NULL default '0' COMMENT '发送人ID',
05.
06.toid int(10) unsigned NOT NULL default '0' COMMENT '收件人ID',
07.content text unsigned NOT NULL COMMENT '邮件内容',
08.subject varchar(100) unsigned NOT NULL COMMENT '邮件标题',
09.
10.sendtime int(10) NOT NULL COMMENT '发送时间',
11.
12.attachment varchar(100) NOT NULL COMMENT '附件ID,以逗号分割', PRIMARY KEY (emailid),
13.) ENGINE=MyISAM';


オープン コンソールを使用します。 Sphinx全文検索PHP使い方講座 に接続するには、コンソール PHP を開く必要があります (インデックス ソースが確立されていることを確認してください):

d:coreseekbinsearchd -c d:coreseekbinsphinx.conf



PHP インターフェース ファイル sphinxapi.php は coreseek/api ディレクトリにあります。このファイルには Sphinx全文検索PHP使い方講座Client クラス
が含まれています。
このファイルを PHP に導入し、新しい
を作成します
ソースプリントを表示しますか?
01.$sphinx = new Sphinx全文検索PHP使い方講座Client();
02.
03.//sphinx的主机名和端口
04.
05.$sphinx->SetServer ( 'loclahost', 9312 );
06.
07.//设置返回结果集为php数组格式
08.
09.$sphinx->SetArrayResult ( true );
10.
11.//匹配结果的偏移量,参数的意义依次为:起始位置,返回结果条数,最大匹配条数
12.
13.$sphinx->SetLimits(0, 20, 1000);
14.
15.//最大搜索时间
16.
17.$sphinx->SetMaxQueryTime(10);
18.
19.
20.
21.//执行简单的搜索,这个搜索将会查询所有字段的信息,要查询指定的字段请继续看下文
22.
23.$index = 'email' //索引源是配置文件中的 index 类,如果有多个索引源可使用,号隔开:'email,diary' 或者使用'*'号代表全部索引源
24.
25.$result = $sphinx->query ('搜索关键字', $index);
26.
27.echo '
<span style="font-size:18px">';

print_r($result);

echo '</span>
';

$result は配列であり、

total は一致したデータの合計数です

matches は、ID や attrs
などの情報を含む一致するデータです。
単語は検索キーワードの単語分割です



なぜメールの内容に関する情報がないのか疑問に思われるかもしれません。実際、sphinx は完全なデータを記録せず、セグメント化されたデータのみを記録するため、mysql のようなデータ配列を返しません。

詳細は、matches 配列にも依存します。matches の ID は、構成ファイルの sql_query SELECT ステートメントの最初のフィールドを参照します。

sql_query = 電子メールから電子メール ID、fromid、toid、件名、内容、送信時刻、添付ファイルを選択します

したがって、一致する ID は emailid
を参照します。
重みについては、一般に重みが大きいほど優先的に返されます。重みの関連情報については、公式ドキュメント
を参照してください。
attrs は設定ファイルの sql_attr_ 内の情報です。これらの属性の使用方法については後述します


そうは言っても、たとえ検索結果が私たちが望む電子メール データでなかったとしても、実際には Sphinx全文検索PHP使い方講座 は実際のデータを記録しないため、実際の電子メール データを取得するには、次の ID に基づいて mysql 電子メール テーブルを検索する必要があります。一般的に言えば、データ量が数十万を超える場合、この往復の速度は依然として mysql の LIKE よりもはるかに高速です。そうでない場合は、sphinx を使用した方が遅くなるだけです。



次に、mysql の条件に似た Sphinx全文検索PHP使い方講座 の使用法をいくつか紹介します

ソースプリントを表示しますか?
01.//emailid的范围
02.
03.$sphinx->SetIdRange($min, $max);
04.
05.
06.
07.//属性过滤,可过滤的属性必需在配置文件中设置sql_attr_    ,之前我们定义了这些
08.
09.sql_attr_uint            = fromid
10.
11.sql_attr_uint            = toid
12.
13.sql_attr_timestamp  = sendtime
14.
15.//如果你想再次修改这些属性,配置完成后记得重新建立索引才能生效
16.
17.
18.
19.//指定一些值
20.
21.$sphinx->SetFilter('fromid', array(1,2));    //fromid的值只能是1或者2
22.
23.//和以上条件相反,可增加第三个参数
24.
25.$sphinx->SetFilter('fromid', array(1,2), false);    //fromid的值不能是1或者2
26.
27.//指定一个值的范围
28.
29.$sphinx->SetFilterRange('toid', 5, 200);    //toid的值在5-200之间
30.
31.//和以上条件相反,可增加第三个参数
32.
33.$sphinx->SetFilterRange('toid', 5, 200, false);    //toid的值在5-200以外
34.
35.
36.
37.//执行搜索
38.
39.$result = $sphinx->query('关键字', '*');


並べ替えモード
検索結果は、次のパターンを使用して並べ替えることができます:

SPH_SORT_RELEVANCE モード、関連性の降順で並べ替えます (最も一致するものが最初になります)

SPH_SORT_ATTR_DESC モード、属性で降順に並べ替えます (属性値が大きいほど高くなります)

SPH_SORT_ATTR_ASC モード、属性で昇順に並べ替えます (属性値が小さいほど高くなります)

SPH_SORT_TIME_SEGMENTS モード、最初は期間 (過去 1 時間/日/週/月) による降順、次に関連性による降順

SPH_SORT_EXTENDED モードでは、SQL のような方法で列を結合し、昇順または降順で並べ替えます。

SPH_SORT_EXPR モード、算術式によるソート


ソースプリントを表示しますか?
01.//使用属性排序
02.
03.//以fromid倒序排序,注意当再次使用SetSortMode会覆盖上一个排序
04.
05.$sphinx->SetSortMode ( "SPH_SORT_ATTR_DESC", 'fromid');
06.
07.//如果要使用多个字段排序可使用SPH_SORT_EXTENDED模式
08.
09.//@id是sphinx内置关键字,这里指emailid,至于为什么是emailid,自己思考一下
10.
11.$sphinx->SetSortMode ( "SPH_SORT_ATTR_DESC", 'fromid ASC, toid DESC, @id DESC');
12.
13.//执行搜索
14.
15.$result = $sphinx->query('关键字', '*');

// 詳細については、ソート モードの手順に関する公式ドキュメントを参照してください

マッチパターン
次のオプションの一致パターンが利用可能です:

SPH_MATCH_ALL、すべてのクエリ用語に一致します (デフォルト モード);

SPH_MATCH_ANY、クエリ単語のいずれかに一致します;

SPH_MATCH_PHRASE、クエリ全体をフレーズとして扱い、順番に完全一致する必要があります。

SPH_MATCH_BOOLEAN、クエリをブール式として扱います

SPH_MATCH_EXTENDED は、クエリを CoreSeek/Sphinx全文検索PHP使い方講座 内部クエリ言語の式として処理します。バージョン CoreSeek 3/Sphinx全文検索PHP使い方講座 0.9.9 以降、このオプションはオプション SPH_MATCH_EXTENDED2 に置き換えられ、より多くの機能と優れたパフォーマンスを提供します。このオプションはレガシー コードとの互換性を保つために残されており、Sphinx全文検索PHP使い方講座 とそのコンポーネント (API を含む) がアップグレードされても、古いアプリケーション コードは引き続き動作します。

SPH_MATCH_EXTENDED2 は、「拡張一致モード」の 2 番目のバージョンを使用してクエリを照合します。

SPH_MATCH_FULLSCAN は、以下で説明する「フル スキャン」モードを使用してクエリを強制的に照合します。このモードでは、すべてのクエリ用語が無視され、フィルター、フィルター範囲、およびグループ化は引き続き機能しますが、テキストの一致は発生しないことに注意してください。
主に注目したいのは、SPH_MATCH_EXTENDED2 拡張マッチング モードです。拡張マッチング モードでは、mysql
などのいくつかの条件付きステートメントを使用できます。

ソースプリントを表示しますか?
01.//设置扩展匹配模式
02.
03.$sphinx->SetMatchMode ( "SPH_MATCH_EXTENDED2" );
04.
05.//查询中使用条件语句,字段用@开头,搜索内容包含测试,toid等于1的邮件:
06.
07.$result = $sphinx->query('@content (测试) & @toid =1', '*');
08.
09.//用括号和&(与)、|、(或者)、-(非,即!=)设置更复杂的条件
10.
11.$result = $sphinx->query('(@content (测试) & @subject =呃) | (@fromid -(100))', '*');
12.
13.//更多语法请查看官方文档匹配模式的说明

拡張一致モードで注目すべき点は、フィールドに属性が設定されている場合、拡張一致によって検索されるフィールドにはデフォルトで SetFilter() または SetFilterRange() などのみが使用できることです。 .

fromid、toid、sendtimeを属性として設定しましたが、拡張マッチングモードで条件として使用したい場合はどうすればよいでしょうか?

sql_query ステートメントでもう一度フィールドを選択するだけです

sql_query = 電子メールからの電子メール ID、fromid、fromid、toid、toid、件名、内容、送信時刻、送信時刻、添付ファイルを選択します

//
を設定した後は必ずインデックスを再構築してください
その他の条件付きヒント
いくつかのヒントですが、デプロイメント環境での使用は推奨されません。その理由については、記事の最後を参照してください



、>=
デフォルトでは、sphinx にはこれらの比較演算子がありません。

特定の日付以降に電子メールを送信したい場合はどうすればよいですか? SetFilterRange() メソッドを使用してシミュレートします

ソースプリントを表示しますか?
01.//大于等于某一时间截$time
02.
03.$sphinx->SetFilterRange('sendtime', $time, 10000000000) //时间截最大是10个9,再加1是不可超越了。。
04.
05.
06.
07.//大于某一时间截$time
08.
09.$sphinx->SetFilterRange('sendtime', $time+1, 10000000000)
10.
11.//小于等于某一时间截$time
12.
13.$sphinx->SetFilterRange('sendtime', -1, $time)    //时间截最小是0,所以应该减1
14.
15.//大于某一时间截$time
16.
17.$sphinx->SetFilterRange('sendtime', -1, $time - 1)

NULL ではありません
空のフィールドを検索するにはどうすればよいですか? たとえば、空の添付ファイルが含まれるメールを検索したい場合、@attachment ('') で十分だと考える人もいるかもしれません。実際には、これは 2 つの一重引用符を検索しています。 。 。 sphinx によって検索される文字列は引用符で囲む必要はありません

現在、sphinx はそのような関数を提供していません。実際には、mysql ステートメントを操作できます。
sql_query = SELECT emailid,fromid,toidsubject,content,sendtime,attachment != '' asattach is not null FROM email //新しいフィールドattachisnotnullがここに返されますattachisnotnullが1の場合、添付ファイルは空ではありません

//
を設定した後は必ずインデックスを再構築してください


FIND_IN_SET()
特定の添付ファイルを含む電子メールを検索するには、mysql は FIND_IN_SET を使用して 1 つの文で検索することに慣れています。sphinx では、属性 sql_attr_multi 多値属性 (MVA) を設定で設定する必要があります。

sql_attr_multi =attachment #attachment には、カンマ区切りの添付ファイル ID、またはスペース、セミコロンなどを指定できます。スフィンクスは
を認識できます。

ソースプリントを表示しますか?
01.//设置完成记得重新建立索引
02.
03.
04.
05.然后PHP中可以使用SetFilter()
06.
07.//搜索包含附件ID为1或2邮件,mysql语法是这样FIND_IN_SET(`attachment`, '1,2')
08.
09.$sphinx->SetFilter('attachment', array(1,2))
10.
11.//可以使用SetFilterRange,搜索包含附件ID在50-100范围的邮件
12.
13.$sphinx->SetFilterRange('attachment', 50, 100)
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
アクション中のPHP:実際の例とアプリケーションアクション中のPHP:実際の例とアプリケーションApr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:インタラクティブなWebコンテンツを簡単に作成しますPHP:インタラクティブなWebコンテンツを簡単に作成しますApr 14, 2025 am 12:15 AM

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPython:2つの一般的なプログラミング言語を比較しますPHPとPython:2つの一般的なプログラミング言語を比較しますApr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの永続的な関連性:それはまだ生きていますか?PHPの永続的な関連性:それはまだ生きていますか?Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター