elasticsearch-8-6-1+laravel scout
下载 es:下载地址
下载ik分词下载地址
解压装到 \elasticsearch-8.6.1\plugins\ik
添加为windows服务:
elasticsearch-service.bat install
可视化工具:elasticHD
在laravel中安装:
composer require laravel/scout
composer require matchish/laravel-scout-elasticsearch
php artisan vendor:publish --provider=“Laravel\Scout\ScoutServiceProvider”
在 .env中添加:
SCOUT_DRIVER=Matchish\ScoutElasticSearch\Engines\ElasticSearchEngine
ELASTICSEARCH_HOST=http://localhost:9200
/config/app.php 修改添加:
'providers' => [
// Other Service Providers
\Matchish\ScoutElasticSearch\ElasticSearchServiceProvider::class
],
/config/elastcsearch.php 设置:
return [
'host' => env('ELASTICSEARCH_HOST'),
'user' => env('ELASTICSEARCH_USER'),
'password' => env('ELASTICSEARCH_PASSWORD'),
'cloud_id' => env('ELASTICSEARCH_CLOUD_ID'),
'api_key' => env('ELASTICSEARCH_API_KEY'),
'queue' => [
'timeout' => env('SCOUT_QUEUE_TIMEOUT'),
],
'indices' => [
'mappings' => [
'default' => [
'properties' => [
'id' => [
'type' => 'keyword',
],
],
],
'articles' => [
"properties"=> [
"name"=> [
"type"=> "text",
"analyzer"=> "ik_max_word",
"search_analyzer"=> "ik_smart"
],
"description"=> [
"type"=> "text",
"analyzer"=> "ik_max_word",
"search_analyzer"=> "ik_smart"
],
"content"=> [
"type"=> "text",
"analyzer"=> "ik_max_word",
"search_analyzer"=> "ik_smart"
]
]
]
],
'settings' => [
'default' => [
'number_of_shards' => 1,
'number_of_replicas' => 0,
],
],
],
];
模型设置:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Articles extends Model
{
use Searchable;
public $timestamps = false;
protected $fillable = ['name', 'description'];
// 定义要搜索的属性
public function toSearchableArray()
{
$array = $this->toArray();
return $array;
}
}
导入数据库:
php artisan scout:import "App\Models\Articles"
进行复杂搜索:
$all= Articles::search('描述 9 描述 6', function ($client, Search $body) {
$higlight = new Highlight();
$higlight->addField('title');
$body->addHighlight($higlight);
return $client->search(['index' => 'articles', 'body' => $body->toArray()])->asArray();
})->raw();