1

据我所知,在 Yii2 中对 ElasticSearch 进行查询的唯一方法是运行ElasticModel::find()->query($query),其中$query是一个复杂的数组,其中包含用 ElasticSearch 查询 DSL 编写的实际查询。

查询很大,很快就会变得难以管理。对于 SQL,Yii2 提供了一个强大的查询构建器类,它支持大量有用的方法,例如andWhere(). 对于 ElasticSearch 来说,一切都集中在一个巨大的查询表达式中,非常类似于手动构建 SQL 表达式字符串。

Yii2 的 ElasticSearch 查询 DSL 是否有任何高级包装器?如果没有,是否有具有类似功能的独立库?

4

1 回答 1

2

如果您打算为 1.6 版的 elastic 构建,我已经为我的公司创建了一个查询构建器并在此处发布

您将使用它作为独立的查询构建器,最后您需要获取最终的查询数组并将其传递给查询执行器。

要安装它,您可以简单地使用 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 回答