chenyuanqi / elasticsearch
elasticsearch Laravel 服务
Requires
- php: >=7.0
- elasticsearch/elasticsearch: ~5.0
- illuminate/support: ~5.1
Requires (Dev)
- phpunit/phpunit: @stable
Suggests
- elasticsearch/elasticsearch: Required for ElasticSearch driver.
This package is not auto-updated.
Last update: 2024-09-27 23:44:06 UTC
README
此包依赖于 "elasticsearch/elasticsearch",并为各种不同的全文搜索服务提供统一的 API。
注意:测试了 elasticsearch 2.x,甚至 5.x;无论如何,某些功能在低版本中可能无法生效。
以下搜索驱动器需要以下依赖项
{
"php": ">=7.0",
"illuminate/support": "~5.1",
"elasticsearch/elasticsearch": "~5.0"
}
结构
├── Commands
│ └── ElasticsearchService.php
├── config
│ └── elasticsearch.php
├── Analyze.php
├── Builder.php
├── Query.php
├── SearchFacade.php
└── SearchServiceProvider.php
建议
出于安全考虑,请安装插件:shield
为了有效地搜索,以下插件可能对您有所帮助
1、head
2、bigdesk
3、kopt
4、sql
5、ik
6、pinyin
7、同义词
8、简繁转换
安装
您可以在 composer.json 文件中编辑 require 对象
{
"chenyuanqi/elasticsearch": "dev-master"
}
或使用 composer 命令
composer require chenyuanqi/elasticsearch
然后,运行 composer update 来安装此包。
实际上,在 laravel5 中,您仍然需要将服务提供者添加到 app/config/app.php 的 providers 数组中。
'providers' => [ // elasticsearch service chenyuanqi\elasticsearch\SearchServiceProvider::class, ],
在 app/config/app.php 的 aliases 数组中添加一个类别名。
'aliases' => [ // elasticsearch service facade 'Search' => chenyuanqi\elasticsearch\SearchFacade::class, ],
配置
在 laravel5 中,将默认配置文件发布到您的应用程序,然后进行修改。
php artisan vendor:publish
但是,默认配置文件是 config/elasticsearch.php。
Laravel 使用方法
1、创建索引的搜索
Search::createIndex();
注意:索引名称必须为小写。
2、由于配置进行映射搜索
Search::createMapping(); Search::updateMapping(); Search::deleteMapping();
3、搜索索引和类型
Search::index('test')->type('test');
注意:这里索引和类型有默认值。
4、搜索插入数据
$data = [ 'name' => 'Kyyomi', 'age' => 18, 'birth' => '2017-03-03' ]; // However, you can set id for the record. For instance, "Search::insert($data, 1);" Search::insert($data);
5、搜索更新数据
这里提供两种更新数据的方式,
$data = [ 'birth' => '1999-03-03' ]; // update by id Search::updateById($data, 1); // update by query Search::queryString('name:"Kyyomi"')->update($data);
顺便说一下,使用 update by query 必须打开脚本设置
# In elasticsearch 2.3.3, allow script operate script.inline: true script.indexed: true script.file: true script.engine.groovy.inline.update: true script.engine.groovy.inline.aggs: true
6、搜索增加或减少数据
Search::queryString('name:"海盗之王"')->increase('age'); Search::queryString('name:"海盗之王"')->increase('age', 2); Search::queryString('name:"海盗之王"')->decrease('age', 3);
类似于 update by query,增加或减少也打开脚本设置
7、搜索删除数据
这里提供两种删除数据的方式,
$data = [ 'birth' => '1999-03-03' ]; // delete by id Search::deleteById(1); // delete by query, not support for version >2.0 (consider plugin: delete-by-query) Search::queryString('name:"Kyyomi"')->delete();
8、搜索清理索引
Search::truncate();
9、搜索批量处理
$data = [ [ 'index', '_id' => 1, 'name' => 'viki', 'age' => 18 ], [ 'create', '_id' => 2, 'name' => 'lucy', 'age' => 15 ], [ 'update', '_id' => 1, 'name' => 'vikey', 'age' => 28 ], [ 'delete', '_id' => 2 ] ] Search::bulk($data);
注意:默认处理是 'index'。
10、一切都是为了搜索
您可以选择显示的字段进行搜索。
Search::pluck(['name', 'age'])->search();
默认分页为 true,显示前十个结果。如果您不需要它
Search::pluck(['name', 'age'])->search(false);
使用 queryString 构造条件,就像这样
Search::queryString('name=Kyyomi');
或使用 filter 构造条件
Search::filter('status', 'show');
或使用 ids 构造条件
Search::ids([1, 2, 3]); // If other field with in or not in function Search::whereIn('name', ['A', 'B', 'C']); Search::whereNotIn('name', ['A', 'B', 'C']);
或使用 match 构造条件
Search::match('name', 'Kyyomi', 'match'); Search::match(['name', 'age'], 'Kyyomi', 'multi_match'); Search::match('Kyyomi');
或使用 term 构造条件
Search::term('name', 'Kyyomi');
或使用 bool 构造条件
// The third parameter include must(default value), must_not, should, filter. Search::bool('name', 'Kyyomi', 'must_not');
或使用 null 构造条件
Search::isNull('name'); // If need the field is not null Search::isNotNull('name');
或使用聚合构造条件
Search::max('id'); Search::min('id'); Search::sum('id'); Search::avg('id');
或使用范围构造条件
Search::range('age', [7, 18], ['gt', 'lte']);
然而,范围查询有第四个参数,用作额外操作。
或者使用带where条件的查询
Search::where('id', '=', 100)->search(); // The same as last sentence Search::where('id', 100)->search(); Search::where('id', '=', 100)->orWhere('age', '>=', 18)->search(); // Also, we can use like query Search::where('name', 'like', '%天天%')->search(); // any more where function like whereBetween, whereNotBetween Search::whereBetween('id', [1, 2]);
当需要分页时,这里有两种方法。
// paging style Search::queryString('name:"珍珠海盗"')->limit(0, 10)->search(); // scroll style Search::queryString('name:"珍珠海盗"')->scroll(1000, '30s', 'scan')->search(); // If you want use scroll id for search or delete it Search::searchByScrollId('xxx'); Search::deleteByScrollId('xxx');
只需使用count函数来计数记录。
Search::queryString('name:"珍珠海盗"')->count();
最后,使用调试函数输出所需的调试信息。
Search::queryString('name:"珍珠海盗"')->search(); Search::debug(); // If you need curl sentence, do it Search::toCurl();
注意:必须在搜索之后输出信息。
其他用法
你知道,它首先使用上面提到的laravel用法。
所以在这里,只需像这样替换Search对象
use chenyuanqi\elasticsearch\Builder; $search = new Builder(false);
好的,快乐黑客时间~