kinch/laravel-scout-elasticsearch

Elastic Driver for Laravel Scout

v2.1.0 2023-07-18 14:54 UTC

This package is auto-updated.

Last update: 2024-04-18 16:29:35 UTC


README

Elasticsearch Driver for Laravel Scout

Installation

You can install the package via composer:

composer require kinch/laravel-scout-elasticsearch:"^2.0"

Setting up Elasticsearch configuration

vendor:publish

php artisan vendor:publish --provider="Kinch\LaravelScoutElasticsearch\LaravelScoutElasticsearchServiceProvider"

After you've published the Laravel Scout package configuration, you need to set your driver to elasticsearch and add its configuration:

// config/elasticsearch.php
<?php

return [
    'host' => env('ELASTICSEARCH_HOST'),
    'user' => env('ELASTICSEARCH_USER'),
    'password' => env('ELASTICSEARCH_PASSWORD'),
    'cert' => storage_path(env('ELASTICSEARCH_CERT')),

    'cloud_id' => env('ELASTICSEARCH_CLOUD_ID'),
    'api_key' => env('ELASTICSEARCH_API_KEY'),
    'queue' => [
        'timeout' => env('SCOUT_QUEUE_TIMEOUT'),
    ],
    
    // index_ is followed by the index name
    'index_article' => [
        'settings' => [
            'number_of_shards' => 5,
            'number_of_replicas' => 1,
        ],
        'mappings' => [
            "properties" => [
                "title" => [
                    "type" => "text",
                    "analyzer" => "ik_max_word",
                    "search_analyzer" => "ik_smart",
                    "fields" => ["keyword" => ["type" => "keyword", "ignore_above" => 256]],
                ],
            ],
        ],
    ],
];

Usage

Set env variables

SCOUT_DRIVER=Kinch\LaravelScoutElasticsearch\Engines\ElasticsearchEngine
ELASTICSEARCH_HOST=host:port
ELASTICSEARCH_USER=elastic
ELASTICSEARCH_PASSWORD=
ELASTICSEARCH_CERT=certs/http_ca.crt

Set ELASTICSEARCH_HOST env variable

ELASTICSEARCH_HOST=host:port,host:port
console
// create index
php artisan scout:index article

// delete index
php artisan scout:delete-index article

// batch update data to es
php artisan scout:import "App\Models\Article"

search example
use App\Models\Article;

// $condition = "test";
// ... or
// $condition = [
//     "title" => "test",
//     "abstract" => "test"
// ];
// ... or
$keyword = "test";
$source = [1,2];
$startTime = '2023-05-01T00:00:00.000+0800';
$endTime = '2023-05-20T00:00:00.000+0800';
$condition = [
    "_customize_body" => 1,
    "bool" => [
        "should" => [
            [
                "match" => [
                    "title" => ["query" => $keyword, 'boost' => 5]
                ]
            ],
            [
                "match" => [
                    "abstract" => ["query" => $keyword, 'boost' => 3]
                ]
            ],
        ],
        "must" => [
            [
                "terms" => ["source" => $source]
            ],
            [
                "range" => [
                    "created_at" => [
                        'gte' => $startTime,
                        'lte' => $endTime
                    ]
                ]
            ]
        ]
    ],
     
];

$data = Article::search($condition)
        ->orderBy('_score', 'desc')
        ->paginate(10);

More please see Laravel Scout official documentation.

License

The MIT License (MIT).