1

私の知る限り、Yii2 で ElasticSearch にクエリを作成する唯一の方法は、 を実行することですElasticModel::find()->query($query)。ここで、$queryは ElasticSearch クエリ DSL で記述された実際のクエリを含む複雑な配列です。

クエリは巨大で、すぐに管理不能になります。SQL 用に、Yii2 は強力なクエリ ビルダ クラスを提供しており、andWhere(). ElasticSearch では、手作業で SQL 式の文字列を作成するのと同じように、すべてが 1 つの巨大なクエリ式に入ります。

Yii2 の ElasticSearch クエリ DSL の高レベル ラッパーはありますか? そうでない場合、同様の機能を持つスタンドアロン ライブラリはありますか?

4

1 に答える 1

2

Elastic のバージョン 1.6 用にビルドする場合は、会社用にクエリ ビルダーを作成し、ここで公開しました。

これをスタンドアロンのクエリ ビルダーとして使用し、最後に最終的なクエリ配列を取得してクエリ実行プログラムに渡す必要があります。

それをインストールするには、composer を使用するか、こちらcomposer require itvisionsy/php-es-ormから圧縮バージョンをダウンロードします。

上記のリンクにはいくつかの例が含まれており、ここにコピーがあります。

//build the query using different methods
$query = \ItvisionSy\EsMapper\QueryBuilder::make()
            ->where('key1','some value') //term clause
            ->where('key2',$intValue,'>') //range clause
            ->where('key3','value','!=') //must_not term clause
            ->where('key4', ['value1','value2']) //terms clause
            ->where('email', '@hotmail.com', '*=') //wildcard search for all @hotmail.com emails
            ->sort('key1','asc') //first sort option
            ->sort('key2',['order'=>'asc','mode'=>'avg']) //second sort option
            ->from(20)->size(20) //results from 20 to 39
            ->toArray();

//modify the query as you need
$query['aggs']=['company'=>['terms'=>['field'=>'company']]];

//then execute it against a type query
$result = TypeQuery::query($query);
//i am not sure about Yii way to execute, according to the question, it should be:
$result = ElasticModel::find()->query($query); 

このパッケージには、便利な簡単な ElasticSearch ORM クラスも含まれています。こちらをご覧ください。

これがお役に立てば幸いです...

于 2016-03-25T20:45:20.883 に答える