funphp/elasticsearch

An Elasticsearch query package

1.1.7 2024-04-09 05:36 UTC

This package is auto-updated.

Last update: 2024-04-09 05:37:39 UTC


README

一个基于elasticsearch/elasticsearch简易的Elasticsearch工具包, 对Document 的查询操作进行了简单的封装.

安装

composer require funphp/elasticsearch

使用

引入相关搜索类

在你需要搜索的类中添加 \Funphp\Elasticsearch\Searchable trait, 就可以使用相关的搜索操作了.

通过 searchableIndex()方法, 就可以指定index了.

namespace Start;

use Funphp\Elasticsearch\Searchable;

Class User{
    use Searchable;
    
    public function searchableIndex(): string
    {
        return 'index-user';
    }
}

查询文档

根据指定id查询

self::searchable()
    ->searchableId('test-id')
    ->search();

term

self::searchable()
    ->query(function (Query $query) {
        $query->term('status', 1);
    })
    ->search();

match

self::searchable()
    ->query(function (Query $query) {
        $query->match('name', '乌拉');
    })
    ->search();

ids

self::searchable()
    ->query(function (Query $query) {
        $query->ids([1, 2]);
    })
    ->search();

range

self::searchable()
    ->query(function (Query $query) {
        $query->range('age', function (Range $range) {
            $range->gte(20);
        });
    })
    ->search();

bool

must

self::searchable()
    ->query(function (Query $query) {
        $query->bool(function (BoolQuery $boolQuery) {
            $boolQuery->must(function (Query $query) {
                $query->range('login_at', function (Range $range) {
                    $range->gte('2021-10-01 00:00:00');
                });
            })->must(function (Query $query) {
                $query->range('age', function (Range $range) {
                    $range->lt(18)->gte(12);
                });
            });
        });
    })
    ->sort(fn(Sort $sort) => $sort->sortBy('age'))
    ->search();

must_not

self::searchable()
    ->query(function (Query $query) {
        $query->bool(function (BoolQuery $boolQuery) {
            $boolQuery->mustNot(function (Query $query) {
                $query->exists('comments');
            });
        });
    })
    ->from(10)
    ->size(10)
    ->source(['id', 'title', 'content'])
    ->search();
  • filter should用法与must相同

source

你可以使用`source` 来指定查询的列

对于分页查询,你可以使用`from`和`size`方法来实现.

aggs

self::searchable()
    ->query(function (Query $query) {
        $query->term('status', $status);
    })->aggs(function (Aggregation $aggregation) {
        $aggregation->valueCount('count', 'id')
            ->max('max', 'value')
            ->sum('sum', 'value');
    })->search();