我在ElasticSearch中有 2个索引 documents_1
和documents_2
,它们具有不同的映射类型(它们有一些不同的属性)。我在Yii2
上使用php
框架在网上搜索。
问题:如何搜索2个索引(如果可能)并将结果合并为一个按日期排序的例如?要解释我确实需要这样的东西:
$queryOne = DocumentOne::find()->all();
$queryTwo = DocumentTwo::find()->all();
merge_results($queryOne, $queryTwo);
DocumentOne.php
class DocumentOne extends \yii\elasticsearch\ActiveRecord
{
public static function index()
{
return 'documents_1';
}
public static function type()
{
return 'type_a';
}
public function attributes()
{
return ['id', 'any_1', 'created_format_1'];
}
}
DocumentTwo.php
class DocumentTwo extends \yii\elasticsearch\ActiveRecord
{
public static function index()
{
return 'documents_2';
}
public static function type()
{
return 'type_b';
}
public function attributes()
{
return ['id', 'any_2', 'created_format_2'];
}
}
DocumentOneSearch.php
class DocumentOneSearch extends DocumentOne
{
public function search($params)
{
$query = DocumentOne::find();
$sort = new Sort([
'defaultOrder' => [
'created_format_1' => SORT_DESC,
],
]);
return $query
->orderBy($sort->orders)
->all();
}
}
答案 0 :(得分:0)
您是否考虑过以下内容:
function cmp($a, $b)
{
return strcmp($a->date, $b->date);
}
$queryOne = DocumentOne::find()->all();
$queryTwo = DocumentTwo::find()->all();
$result = array_merge($queryOne, $queryTwo);
usort($result, "cmp");
假设您的文档有一个名为date
的属性?
编辑:如果您只需要对第一组结果进行排序,那么您只需array_merge()结果