Heim >PHP-Framework >Laravel >Wie nutzt Laravel Scout, um Elasticsearch für die Volltextsuche zu integrieren?

Wie nutzt Laravel Scout, um Elasticsearch für die Volltextsuche zu integrieren?

藏色散人
藏色散人nach vorne
2021-04-14 10:18:392252Durchsuche

In der folgenden Tutorial-Kolumne von laravel erfahren Sie, wie Laravel Scout zur Integration von Elasticsearch für die Volltextsuche verwendet. Ich hoffe, dass es für Freunde in Not hilfreich ist!

Wie nutzt Laravel Scout, um Elasticsearch für die Volltextsuche zu integrieren?

Begrenzt auf die Version ES6.8 Verwenden Sie dann den Befehl

composer require tamayo/laravel-scout-elastic
composer require laravel/scout
Ändern Sie die Konfigurationsdatei (config/app.php), fügen Sie die folgenden zwei Anbieter hinzu

Using version ^6.1 for laravel/scout
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev].
    - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev].
    - tamayo/laravel-scout-elastic 4.0.0 requires laravel/scout ^5.0 -> satisfiable by laravel/scout[5.0.x-dev].
    - Conclusion: don't install laravel/scout 5.0.x-dev
    - Installation request for tamayo/laravel-scout-elastic ^4.0 -> satisfiable by tamayo/laravel-scout-elastic[4.0.0].


Installation failed, reverting ./composer.json to its original content.

Vervollständigen Sie die Hinzufügung, führen Sie den Befehl aus, generieren Sie die Konfigurationsdatei

composer require laravel/scout ^5.0

Ändern Sie config/scout.php

'providers' => [  
        //es search 加上以下内容  
        Laravel\Scout\ScoutServiceProvider::class,  
        ScoutEngines\Elasticsearch\ElasticsearchProvider::class,  
]

Konfigurieren Sie das ES-Konto in .env:Password@Connect

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

Erstellen Sie eine Befehlszeilendatei, um eine Zuordnung zu generieren, gehen Sie zu App/Konsole/Befehle

    'driver' => env('SCOUT_DRIVER', 'elasticsearch'),

    'elasticsearch' => [
        'index' => env('ELASTICSEARCH_INDEX', '你的Index名字'),
        'hosts' => [
            env('ELASTICSEARCH_HOST', ''),
        ],
    ],

Registrieren Sie diesen Befehl im Kernel

ELASTICSEARCH_HOST=elastic:密码@你的域名.com:9200

Führen Sie diesen Befehl aus, um eine Zuordnung zu generieren

<?php
namespace App\Console\Commands;
use GuzzleHttp\Client;
use Illuminate\Console\Command;

class ESInit extends Command {

    protected $signature = &#39;es:init&#39;;

    protected $description = &#39;init laravel es for news&#39;;

    public function __construct() { parent::__construct(); }

    public function handle() { //创建template
        $client = new Client([&#39;auth&#39;=>['elastic', 'yourPassword']]);
        $url = config('scout.elasticsearch.hosts')[0] . '/_template/news';
        $params = [
            'json' => [
                'template' => config('scout.elasticsearch.index'),
                'settings' => [
                    'number_of_shards' => 5
                ],
                'mappings' => [
                    '_default_' => [
                        'dynamic_templates' => [
                            [
                                'strings' => [
                                    'match_mapping_type' => 'string',
                                    'mapping' => [
                                        'type' => 'text',
                                        'analyzer' => 'ik_smart',
                                        'ignore_above' => 256,
                                        'fields' => [
                                            'keyword' => [
                                                'type' => 'keyword'
                                            ]
                                        ]
                                    ]
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ];
        $client->put($url, $params);

        // 创建index
        $url = config('scout.elasticsearch.hosts')[0] . '/' . config('scout.elasticsearch.index');

        $params = [
            'json' => [
                'settings' => [
                    'refresh_interval' => '5s',
                    'number_of_shards' => 5,
                    'number_of_replicas' => 0
                ],
                'mappings' => [
                    '_default_' => [
                        '_all' => [
                            'enabled' => false
                        ]
                    ]
                ]
            ]
        ];
        $client->put($url, $params);

    }
}

Ändern Sie das Modell, um die Volltextsuche zu unterstützen

<?php

namespace App\Console;

use App\Console\Commands\ESInit;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        ESInit::class
    ];

Importieren Sie Volltextindexinformationen

 php artisan es:init

Testen Sie den einfachen Volltextindex

<?php
namespace App\ActivityNews\Model;

use App\Model\Category;
use App\Star\Model\Star;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;


class ActivityNews extends Model
{
    use Searchable;

    protected $table = &#39;activity_news&#39;;
    protected $fillable = [
        &#39;type_id&#39;,
        &#39;category_id&#39;,
        &#39;title&#39;,
        &#39;sub_title&#39;,
        &#39;thumb&#39;,
        &#39;intro&#39;,
        &#39;star_id&#39;,
        &#39;start_at&#39;,
        &#39;end_at&#39;,
        &#39;content&#39;,
        &#39;video_url&#39;,
        &#39;status&#39;,
        &#39;is_open&#39;,
        &#39;is_top&#39;,
        &#39;rank&#39;,
    ];

    public function star()
    {
        return $this->hasOne(Star::class, 'id', 'star_id');
    }

    public function category()
    {
        return $this->hasOne(Category::class, 'id', 'category_id');
    }

    public static function getActivityIdByName($name)
    {
        return self::select('id')
            ->where([
                ['status', '=', 1],
                ['type_id', '=', 2],
                ['title', 'like', '%' . $name . '%']
            ])->get()->pluck('id');
    }

}

Verwandte Empfehlungen:

Die neuesten fünf Laravel-Video-Tutorials

Das obige ist der detaillierte Inhalt vonWie nutzt Laravel Scout, um Elasticsearch für die Volltextsuche zu integrieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen