There is no license information available for the latest version (0.1.1) of this package.

0.1.1 2024-12-05 02:55 UTC

This package is auto-updated.

Last update: 2025-03-05 03:39:27 UTC


README

配置

项目入口文件

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

配置文件 .env 放在项目入口文件同级目录

ELASTICSEARCH_HOST=""
ELASTICSEARCH_USERNAME=""
ELASTICSEARCH_PASSWORD=""

创建索引

use xudongyss\es\Client;
use xudongyss\es\index\Index;
use xudongyss\es\index\Analyzer;
use xudongyss\es\index\mappings\properties\Field;

$index = Index::create()
    ->setIndex('jxzrzyhgh')
    ->setSettingsNumberOfShards(3)
    ->setSettingsNumberOfReplicas(2)
    ->setSettingsAnalysisAnalyzer(Analyzer::create()
        ->setName('ik_analyzer')
        ->setType('custom')
        ->setTokenizer('ik_max_word'))
    ->setMappingsProperties(Field::create()
        ->setFiled('id')
        ->setType('integer'))
    ->setMappingsProperties(Field::create()
        ->setFiled('title')
        ->setType('text')
        ->setAnalyzer('ik_analyzer')
        ->setFields(Field::create()
            ->setFiled('raw')
            ->setType('keyword')
        )
    )
    ->setMappingsProperties(Field::create()
        ->setFiled('content')
        ->setType('text')
        ->setAnalyzer('ik_analyzer')
    )
    ->setMappingsProperties(Field::create()
        ->setFiled('url')
        ->setType('keyword')
    )
    ->setMappingsProperties(Field::create()
        ->setFiled('create_time')
        ->setType('date')
        ->setFormat('yyyy-MM-dd HH:mm:ss')
    )
    ->build();
Client::indices()->create($index);

Geopoint field type

use xudongyss\es\Client;
use xudongyss\es\index\Index;
use xudongyss\es\index\mappings\properties\Field;

$index = Index::create()
    ->setIndex('geo')
    ->setSettingsNumberOfShards(3)
    ->setSettingsNumberOfReplicas(2)
    ->setMappingsProperties(Field::create()
        ->setFiled('name')
        ->setType('keyword')
    )
    ->setMappingsProperties(Field::create()
        ->setFiled('location')
        ->setType('geo_point')
    )
    ->build();
Client::indices()->create($index);

插入

use xudongyss\es\Client;
use xudongyss\es\document\Index;

$params = Index::create()
    ->setIndex('jxzrzyhgh')
    ->setId('')
    ->setBody([
        'id' => '',
        'title' => '',
        'content' => '',
        'url' => '',
        'create_time' => ''
    ])
    ->build();
Client::index($params);

Geopoint field type

// lat: 纬度,lon: 经度
$params = DocumentIndex::create()
    ->setIndex('geo')
    ->setBody([
        'name' => '正荣光谷紫阙台',
        'location' => '30.479665,114.39972',    // lat,lon
    ])
    ->build();

$params = DocumentIndex::create()
    ->setIndex('geo')
    ->setBody([
        'name' => '正荣光谷紫阙台',
        'location' => [114.39972, 30.479665],    // [lon, lat]
    ])
    ->build();

$params = DocumentIndex::create()
    ->setIndex('geo')
    ->setBody([
        'name' => '正荣光谷紫阙台',
        'location' => [
            'lat' => 30.503151,
            'lon' => 114.414082,
        ]
    ])
    ->build();

搜索

query And bool

match

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\QueryMatch;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(QueryMatch::create()
        ->setQuery('武汉')
        ->setField('title'))
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();
$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

match_phrase

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\MatchPhrase;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(MatchPhrase::create()
        ->setQuery('武汉')
        ->setField('title'))
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();
$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

multi_match

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\MultiMatch;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(MultiMatch::create()
        ->setQuery('武汉')
        ->setFields(['title'])
    )
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();

// phrase
$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(MultiMatch::create()
        ->setQuery('武汉')
        ->setFields(['title'])
        ->setType('phrase')
    )
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();

$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

term

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\Term;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(Term::create()
        ->setField('url')
        ->setValue('https://baidu.com')
    )
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();

$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

terms

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\Terms;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(Terms::create()
        ->setField('url')
        ->setTerms(['https://baidu.com'])
    )
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();

$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

range

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\Range;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(Range::create()
        ->setField('create_time')
        ->setGte(date('Y-m-d H:i:s', strtotime('-7 days')))
        ->setLte(date('Y-m-d H:i:s'))
    )
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();

$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

ids

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\IDs;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQuery(IDs::create()
        ->setValues([34709, 36923, 42330])
    )
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setSize(10000)
    ->build();

$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

geo_distance

use xudongyss\es\document\query\geo\Distance;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('geo')
    ->setQuery(Distance::create()
        ->setField('location')
        ->setDistance('5km')
        ->setLocation('30.503151,114.414082')
    )
    ->setFields(['name', 'location'])
    ->build();

query

bool

script_fields

use xudongyss\es\document\query\geo\Distance;
use xudongyss\es\document\script\Field;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('geo')
    ->setQuery(Distance::create()
        ->setField('location')
        ->setDistance('5km')
        ->setLocation('30.503151,114.414082')
    )
    ->setFields(['name', 'location'])
    ->setScriptFields(Field::create()
        ->setField('distance_to_target')
        ->setSource("doc['location'].arcDistance(params.lat, params.lon)")
        ->setParams('lat', 30.503151)
        ->setParams('lon', 114.414082)
    )
    ->build();

fields

source

from

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\QueryMatch;
use xudongyss\es\document\Search;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(QueryMatch::create()
        ->setQuery('武汉')
        ->setField('title'))
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setFrom(0)
    ->setSize(5)
    ->build();
$list = Client::search($params);
$list = json_decode((string)$list->getBody(), true);

size

sort

use xudongyss\es\document\highlight\Field;
use xudongyss\es\document\query\QueryMatch;
use xudongyss\es\document\Search;
use xudongyss\es\document\Sort;

$params = Search::create()
    ->setIndex('jxzrzyhgh')
    ->setQueryBoolShould(QueryMatch::create()
        ->setQuery('武汉')
        ->setField('title'))
    ->setSourceIncludes(['id', 'title', 'url', 'create_time'])
    ->setHighlightFields(Field::create()
        ->setField('title'))
    ->setFrom(0)
    ->setSize(5)
    ->setSort(Sort::create()
        ->setField('create_time')
        ->setOrder('desc')
    )
    ->build();

highlight