찾다
PHP 프레임워크LaravelLaravel은 전체 텍스트 검색을 위해 Elasticsearch를 통합하기 위해 scout를 어떻게 사용합니까?

다음 튜토리얼 칼럼인 laravel에서는 Laravel이 scout를 사용하여 전체 텍스트 검색을 위해 Elasticsearch를 통합하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

Laravel은 전체 텍스트 검색을 위해 Elasticsearch를 통합하기 위해 scout를 어떻게 사용합니까?

es6.8 버전으로 제한됩니다
laravel 5.5 버전

필수 구성 요소를 설치하세요

composer require tamayo/laravel-scout-elastic
composer require laravel/scout

작성자가 laravel/scout에서 오류를 보고하는 경우

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.

그런 다음

composer require laravel/scout ^5.0

구성 파일(config/app.php)을 수정하고 다음 두 공급자를 추가합니다

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

추가를 완료하고 명령을 실행하고 구성 파일을 생성합니다

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

config/scout.php를 수정

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

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

.env에서 ES 계정을 구성하세요.Password@Connect

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

명령줄 파일을 생성하여 매핑을 생성하고 app/Console/Commands

<?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);

    }
}
로 이동하세요

<?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
    ];

커널에 이 명령을 등록하세요

 php artisan es:init

이 명령을 실행하여 매핑을 생성하세요

<?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');
    }

}

전체 텍스트 검색을 지원하도록 모델 수정

php artisan scout:import "App\ActivityNews\Model\ActivityNews"

전체 텍스트 인덱스 정보 가져오기

php artisan tinker

>>> App\ActivityNews\Model\ActivityNews::search('略懂皮毛')->get();

간단한 전체 텍스트 인덱스 테스트
rrreee

관련 권장 사항: 최신 5개 Laravel 비디오 튜토리얼

🎜

위 내용은 Laravel은 전체 텍스트 검색을 위해 Elasticsearch를 통합하기 위해 scout를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Redis与Elasticsearch的区别与使用场景Redis与Elasticsearch的区别与使用场景May 11, 2023 am 08:01 AM

Redis与Elasticsearch的区别与使用场景随着互联网信息的快速发展和海量化,数据的高效存储和检索变得越来越重要。为此,NoSQL(NotOnlySQL)类型的数据库出现了,其中又以Redis和Elasticsearch较为流行。本文将对Redis和Elasticsearch进行比较,并探讨它们的使用场景。Redis与Elasticsearch

如何在PHP编程中使用Elasticsearch?如何在PHP编程中使用Elasticsearch?Jun 12, 2023 pm 01:10 PM

随着大数据和云计算技术的发展,搜索引擎也在不断创新。Elasticsearch,作为一个基于Lucene的全文搜索引擎,已经成为了一种流行的选择。这里将会介绍如何在PHP编程中使用Elasticsearch。安装Elasticsearch首先,我们需要安装和设置Elasticsearch。可以在官方网站下载和安装Elasticsearch,具体安装方法可以参

PHP和Elasticsearch集成实现全文检索功能详解PHP和Elasticsearch集成实现全文检索功能详解Jun 25, 2023 am 10:14 AM

随着互联网的发展,企业面对的文本数据越来越庞大。如何快速、准确地检索出相关内容,成为企业在信息化领域的重要课题之一。Elasticsearch作为一个基于Lucene的开源搜索引擎,具有高可用性、高可扩展性和快速检索的特点,成为企业全文检索的首选方案之一。而PHP作为一门流行的服务器端编程语言,也能够快速进行Web开发和API开发,成为与Elasticsea

MySQL数据同步Elasticsearch的方案有哪些MySQL数据同步Elasticsearch的方案有哪些Jun 01, 2023 pm 06:37 PM

商品检索大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢?MySQL同步ES1.同步双写这是能想到的最直接的方式,在写入MySQL,直接也同步往ES里写一份数据。同步双写对于这种方式:优点:实现简单缺点:业务耦合,商品的管理中耦合大量数据同步代码影响性能,写入两个存储,响应时间变长不便扩展:搜索可能有一些个性化需求,需要

如何使用Elasticsearch和PHP构建智能问答系统如何使用Elasticsearch和PHP构建智能问答系统Jul 07, 2023 pm 03:55 PM

如何使用Elasticsearch和PHP构建智能问答系统引言:随着人工智能技术的快速发展,智能问答系统正逐渐成为人们获取信息的重要方式。Elasticsearch作为一个强大的搜索引擎,拥有快速、高效的全文搜索和分析能力,可以为智能问答系统提供强大的支持。本文将介绍如何使用Elasticsearch和PHP构建一个简单的智能问答系统,并提供相应的代码示例。

PHP和Elasticsearch实现的高性能的文本分类技术PHP和Elasticsearch实现的高性能的文本分类技术Jul 07, 2023 pm 02:49 PM

PHP和Elasticsearch实现的高性能文本分类技术引言:在当前的信息时代,文本分类技术被广泛应用于搜索引擎、推荐系统、情感分析等领域。而PHP是一种广泛使用的服务器端脚本语言,具有简单易学、效率高等特点。在本文中,我们将介绍如何利用PHP和Elasticsearch实现高性能的文本分类技术。一、Elasticsearch简介Elasticsearch

同步MySQL数据至Elasticsearch的方式有哪些同步MySQL数据至Elasticsearch的方式有哪些May 30, 2023 pm 08:49 PM

1.业务层同步由于对MySQL数据的操作也是在业务层完成的,所以在业务层同步操作另外的数据源也是很自然的,比较常见的做法就是在ORM的hooks钩子里编写相关同步代码。这种方式的缺点是,当服务越来越多时,同步的部分可能会过于分散从而导致难以更新迭代,例如对ES索引进行不兼容迁移时就可能会牵一发而动全身。2.中间件同步当应用架构演变为微服务时,各个服务里可能不再直接调用MySQL,而是通过一层middleware中间件,这时候就可以在中间件操作MySQL的同时同步其它数据源。这种方式需要中间件去适

ThinkPHP6中如何进行Elasticsearch全文搜索操作?ThinkPHP6中如何进行Elasticsearch全文搜索操作?Jun 12, 2023 am 10:38 AM

随着互联网的快速发展和数据量的增加,如何高效地进行全文搜索已经成为了越来越多开发者面临的问题。Elasticsearch是一种流行的全文搜索引擎,它能够快速处理大量的文本数据,并对其进行检索和分析,这使得它成为了很多Web应用程序的首选工具。现在,ThinkPHP6也已经开始支持Elasticsearch全文搜索操作,为开发者带来更加高效的搜索方案。首先,我

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.