ホームページ  >  記事  >  バックエンド開発  >  Laravel Search拡張パッケージを使用して、Elasticsearch、Algolia、ZendSearchに基づく全文検索機能を実装します

Laravel Search拡張パッケージを使用して、Elasticsearch、Algolia、ZendSearchに基づく全文検索機能を実装します

WBOY
WBOYオリジナル
2016-06-23 13:12:291126ブラウズ

Laravel Search 拡張パッケージは、ElasticSearch、Algolia、ZendSearch などのさまざまな全文検索サービスに統合された API を提供します。

1. インストール

Composer を通じてこの依存関係パッケージをインストールします:

composer require mmanos/laravel-search dev-master

インストールが完了したら、config/app.php のプロバイダー配列にサービス プロバイダーを登録します:

'providers' => array(    // ...    Mmanos\Search\SearchServiceProvider::class,)

次に、ファサードをエイリアス配列:

'aliases' => array(    // ...    'Search' => Mmanos\Search\Facade::class,)

2. 構成

拡張パッケージに付属する構成ファイルをアプリケーション構成ディレクトリに公開します:

php artisan vendor:publish

Dependency

関連する検索ドライバーに必要な依存関係パッケージは次のとおりです。

    ZendSearch: zendframework/zendsearch
  • Elasticsearch: elasticsearch/elasticsearch
  • Algolia: algolia/algoliasearch-client-php

デフォルトのインデックス

この拡張機能パッケージは、デフォルトのインデックスを処理する構文: editdefault_indexこの値を変更するには、構成ファイル内で。

3. インデックス操作

この拡張機能パッケージを使用してインデックス付けを処理するのは非常に簡単です。ドキュメントに一意の識別子を指定し、そのインデックスに連想配列を割り当てるだけです。

初回アクセス時にインデックスが存在しない場合は、自動的に作成されます。

ドキュメントにインデックスを付けます

ID 1 のデフォルトのインデックスをドキュメントに追加します:

Search::insert(1, array(    'title' => 'My title',    'content' => 'The quick brown fox...',    'status' => 'published',));

注: この ID は、レコードの削除に使用でき、また で返すこともできます。の検索結果。 。

ドキュメントに追加パラメータを保存する

追加パラメータをドキュメントに保存して、後続の検索結果で取得できるようにすることができます。この機能は、タイムスタンプやその他の識別レコードを参照するときに便利です。

Search::insert(    "post-1",    array(        'title' => 'My title',        'content' => 'The quick brown fox...',        'status' => 'published',    ),    array(        'created_at' => time(),        'creator_id' => 5,    ));

注: 追加のパラメータにはインデックスが付けられませんが、後で取得できるようにインデックスに保存されます。

ドキュメントを削除する

ID を使用してインデックスからドキュメントを削除できます:

Search::delete(1);

インデックスを削除する
Search::deleteIndex();

4. 検索操作

ドキュメントを検索する

該当する文書を検索コンテンツに「fox」を含むすべてのレコード:

$results = Search::search('content', 'fox')->get();

複数のフィールドを検索
$results = Search::search(array('title', 'content'), 'fox')->get();

すべてのフィールドを検索
$results = Search::search(null, 'fox')->get();

あいまい検索を実行する
$results = Search::search('content', 'update', array('fuzzy'=>true))->get();

注: 値を渡すこともできますの間ファジーパラメータには 0 と 1 の間の値が与えられ、この値が 1 に近いほど、より類似します。フィルターは、ステートメント全体:

$results = Search::search('content', 'fox')    ->where('status', 'published')    ->get();

注: 指定された値に複数の単語が含まれている場合、フィルターはフィールド値全体の正確な一致を保証できません。

(地理検索) 位置検索

一部のドライバーは位置ベースの検索をサポートしています:

$results = Search::search('content', 'fox')    ->whereLocation(36.16781, -96.023561, 10000)    ->get();

上記のパラメーターはそれぞれ緯度、経度、距離 (メートル) を表します。

注: 現在、位置ベースの検索をサポートしているのは algolia ドライバーのみです。さらに、次のようなローカル情報が含まれていることを確認する必要があります。 ' => 1.23] 。 ...

特定のクエリに一致するすべてを削除 Document

$results = Search::search('content', 'fox')    ->where('status', 'published')    ->limit(10) // Limit 10    ->get();$results = Search::search('content', 'fox')    ->where('status', 'published')    ->limit(10, 30) // Limit 10, offset 30    ->get();

5. 複数のインデックスの処理

複数のインデックスを処理する必要がある場合は、インデックス名を指定した後、上記のメソッドを単一のインデックスのように使用できます。 「posts」という名前のインデックスにドキュメントを追加します:
$paginator = Search::search('content', 'fox')->paginate(15);

コンテンツに fox が含まれステータスが公開されている投稿をクエリします:
$results = Search::select('id', 'created_at')    ->search('content', 'fox')    ->get();
投稿から ID 1 のドキュメントを削除します:

$results = Search::select('id', 'created_at')    ->where('title', 'My title')    ->where('status', 'published')    ->search('content', 'fox')    ->search('content', 'quick')    ->limit(10)    ->get();

すべての投稿を削除します:
Search::search('content', 'fox')->delete();

6 、詳細クエリ コールバック

クエリをさらに制御したい場合は、すべての条件をクエリに追加した後、クエリが実行される前にコールバック関数を追加できます:

Search::index('posts')->insert(1, array(    'title' => 'My title',    'content' => 'The quick brown fox...',    'status' => 'published',));

各ドライバーには独自の $query オブジェクトがあるため /配列を使用すると、特定のドライバーに対してのみコールバックを実行できます:
$results = Search::index('posts')->search('content', 'fox')    ->where('status', 'published')    ->get();

注: ドライバーの配列を 2 番目のパラメーターとして渡すこともできます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Laravel学習(1)次の記事:Laravel学習(1)