Laravel+Elasticsearch 중국어 검색 방법


Elasticsearch
Elasticsearch 는 Apache Lucene(TM)을 기반 으로 한 오픈 소스 검색엔진 으로 오픈 소스 든 전문 분야 든 Lucene 은 지금까지 가장 선진 적 이 고 성능 이 가장 좋 으 며 기능 이 가장 완전한 검색엔진 라 이브 러 리 로 여 겨 질 수 있다.
하지만 루 셀 은 창고 일 뿐이다.그 강력 한 역할 을 발휘 하려 면 자바 를 사용 하고 응용 프로그램 에 통합 해 야 한다.루 셀 은 매우 복잡 하 다.검색 에 관 한 지식 을 깊이 이해 해서 그것 이 어떻게 일 하 는 지 이해 해 야 한다.
Elasticsearch 도 자바 로 색인 을 만 들 고 검색 기능 을 구현 하기 위해 Lucene 을 사용 합 니 다.그러나 간단 하고 연 결 된 RESTful API 를 통 해 전체 텍스트 검색 을 간단하게 하고 Lucene 의 복잡성 을 숨 기 는 것 이 목적 입 니 다.
그러나 Elasticsearch 는 Lucene 과 전문 검색엔진 뿐만 아니 라 다음 과 같이 제공 합 니 다.
  • 분포 식 실시 간 파일 저장,필드 마다 색인 되 고 검색 가능
  • 실시 간 으로 분석 한 분포 식 검색엔진
  • 수백 대의 서버 로 확장 하여 PB 급 구조 화 또는 비구 조 화 된 데이터 처리
  • 그리고 이 모든 기능 이 서버 에 통합 되 어 있 습 니 다.간단 한 RESTful API,각종 언어의 클 라 이언 트,심지어 명령 행 을 통 해 상호작용 을 할 수 있 습 니 다.손 에 넣 은 Elasticsearch 는 매우 간단 하 다.이것 은 많은 합 리 적 인 부족 한 값 을 제공 하고 초보 자 에 게 복잡 한 검색엔진 이론 을 숨 겼 다.상 자 를 열 면 바로 사용 할 수 있 고 생산 환경 에서 도 사용 할 수 있 는 학습 이 매우 적다.
    Elasticsearch 는 Apache 2 license 에서 사용 이 허 가 돼 무료 로 다운로드,사용,수정 이 가능 하 다.
    ElasticSearch 설치
    Laradock 에는 Elastic Search 가 통합 되 어 있 습 니 다.우 리 는 직접 사용 할 수 있다.
    
    docker-compose up -d elasticsearch
    플러그 인 을 설치 하려 면 명령 을 실행 하 십시오:
    
    docker-compose exec elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install {plugin-name}
    
    //     
    docker-compose restart elasticsearch
    주:
    The vm.max_map_count kernel setting must be set to at least 262144 for production use.
    저 는 centos 7 환경 이기 때문에 시스템 설정 에 직접 설정 합 니 다.sysctl -w vm.max_map_count=262144기본 사용자 이름과 비밀번호:"elastic","changeme",포트 번호:9200

    ElasticHQ

    ElasticHQ is an open source application that offers a simplified interface for managing and monitoring Elasticsearch clusters.
    Management and Monitoring for Elasticsearch.
    http://www.elastichq.org/
  • Real-Time Monitoring
  • Full Cluster Management
  • Full Cluster Monitoring
  • Elasticsearch Version Agnostic
  • Easy Install - Always On
  • Works with X-Pack

  • Elasticsearch Host 를 입력 하면 백 스테이지 에 들 어 갈 수 있 습 니 다.

    기본 생 성 됨:
    클 러 스 터:laradock-cluster
    노드 node:laradock-node
    색인 index:.elastichq
    IK 분사 기 설치
    ElasticSearch 는 주로 자신의 블 로그 나 공식 글 을 검색 하 는 데 사용 되 기 때문에 중국어 단어 기 를 선택해 서 사용 해 야 합 니 다.처음에는 IK 단어 기 를 사용 하 는 것 을 추 천 했 습 니 다.다음은 ElasticSearch 버 전(7.5.1)과 일치 하 는 플러그 인 을 설치 하기 시 작 했 습 니 다.
    https://github.com/medcl/elasticsearch-analysis-ik/releases
    
    //     
    docker-compose exec elasticsearch /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip

    주:zip 파일 을 먼저 다운로드 한 다음 에 설치 할 수 있 습 니 다.속도 가 빠 를 것 입 니 다.
    분사 효과 검사
    Elasticsearch API 테스트 에 따 르 면 단어의 효 과 는 다음 과 같 습 니 다.
    
     ~ curl -X POST "http://your_host/_analyze?pretty" -H 'Content-Type: application/json' -d'
    {
     "analyzer": "ik_max_word",
     "text":   "     "
    }
    '
    
    {
     "tokens" : [
      {
       "token" : " ",
       "start_offset" : 0,
       "end_offset" : 1,
       "type" : "CN_CHAR",
       "position" : 0
      },
      {
       "token" : " ",
       "start_offset" : 1,
       "end_offset" : 2,
       "type" : "CN_CHAR",
       "position" : 1
      },
      {
       "token" : "   ",
       "start_offset" : 2,
       "end_offset" : 5,
       "type" : "CN_WORD",
       "position" : 2
      },
      {
       "token" : "  ",
       "start_offset" : 2,
       "end_offset" : 4,
       "type" : "CN_WORD",
       "position" : 3
      },
      {
       "token" : "  ",
       "start_offset" : 3,
       "end_offset" : 5,
       "type" : "CN_WORD",
       "position" : 4
      }
     ]
    }
    결합 Laravel
    Elasticsearch 는 공식 적 으로 PHP 버 전의 플러그 인 을 제 공 했 지만 Laravel 과 더욱 긴밀 하 게 결합 하고 싶 어서 Scout 와 결합 하여 사용 합 니 다.구체 적 으로tamayo/laravel-scout-elastic플러그 인 을 사 용 했 습 니 다.
    
    composer require tamayo/laravel-scout-elastic
     
    composer require laravel/scout
     
    php artisan vendor:publish
    선택:Laravel\Scout\ScoutServiceProvider
    드라이버 수정elasticsearch:
    
    'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
    색인 생 성
    색인 을 만 드 는 데 는 Ela 시각 화 도구 인 ElasticHQ 를 사용 하여 직접 만 들 수 있 는 몇 가지 방법 이 있 습 니 다.


    다음은 이 색인 을 업데이트 하고 Mappings 부분 을 보충 해 야 합 니 다.Postman 을 사용 할 수 있 습 니 다.

    또 다른 방법 은 Laravel 이 자체 적 으로 가지 고 있 는 Artisan 명령 행 기능 이다.
    여기 서 Artisan 명령 행 을 추천 합 니 다.
    
    php artisan make:command ESOpenCommand
    홈 페이지 알림 에 따 르 면,우 리 는ESOpenCommand에서 Elasticsearch 서버 에 PUT 요청 을 보 낼 수 있 습 니 다.여기 서 Elasticsearch 가 제공 하 는 PHP 플러그 인 을 통 해 우리 가tamayo/laravel-scout-elastic플러그 인 을 사용 할 때 Elasticsearch PHP 플러그 인 이 설치 되 어 있 습 니 다.

    다음은 플러그 인 을 통 해 우리 의 Index 를 만 들 고 코드 를 직접 볼 수 있 습 니 다.
    
     public function handle()
      {
      $host = config('scout.elasticsearch.hosts');
      $index = config('scout.elasticsearch.index');
      $client = ClientBuilder::create()->setHosts($host)->build();
    
      if ($client->indices()->exists(['index' => $index])) {
        $this->warn("Index {$index} exists, deleting...");
        $client->indices()->delete(['index' => $index]);
      }
    
      $this->info("Creating index: {$index}");
    
      return $client->indices()->create([
        'index' => $index,
        'body' => [
          'settings' => [
            'number_of_shards' => 1,
            'number_of_replicas' => 0
          ],
          'mappings' => [
            '_source' => [
              'enabled' => true
            ],
            'properties' => [
              'id' => [
                'type' => 'long'
              ],
              'title' => [
                'type' => 'text',
                'analyzer' => 'ik_max_word',
                'search_analyzer' => 'ik_smart'
              ],
              'subtitle' => [
                'type' => 'text',
                'analyzer' => 'ik_max_word',
                'search_analyzer' => 'ik_smart'
              ],
              'content' => [
                'type' => 'text',
                'analyzer' => 'ik_max_word',
                'search_analyzer' => 'ik_smart'
              ]
            ],
          ]
        ]
      ]);
    }
    

    자,Kibana 를 실행 하 겠 습 니 다.Index 를 만 든 것 을 보 았 습 니 다.

    주 Kibana 로 컬 Docker 설치:
    추 후 에는 Kibana 가 어떻게 사용 하 는 지 에 중점 을 두 겠 습 니 다.
    
    docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://elasticsearch_host -p 5601:5601 -e SERVER_NAME=ki.test kibana:7.5.2
    Index 가 사용 가능 한 지 검증 하기 위해 서 데 이 터 를 삽입 할 수 있 습 니 다.
    
    curl -XPOST your_host/coding01_open/_create/1 -H 'Content-Type:application/json' -d'
    {"content":"        :       1     "}

    브 라 우 저 를 통 해 해당 하 는 데 이 터 를 볼 수 있 습 니 다:

    Index 가 있 으 면 다음 단 계 는 Laravel 과 결합 하여 가 져 오기,업데이트,조회 등 작업 을 할 수 있 습 니 다.
    Laravel 모델 사용
    Laravel 프레임 워 크 는 Scout 전문 검색 을 추천 합 니 다.Article Model 에 공식 적 으로 말 한 내용 만 추가 하면 됩 니 다.간단 합 니 다.Scout 사용 문 서 를 보 시 는 것 을 추천 합 니 다.https://learnku.com/docs/laravel/6.x/scout/5191아래 코드 를 직접 올 립 니 다.
    
    <?php
    
    namespace App;
    
    use App\Tools\Markdowner;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\SoftDeletes;
    use Laravel\Scout\Searchable;
    
    class Article extends Model
    {
      use Searchable;
    
      protected $connection = 'blog';
      protected $table = 'articles';
      use SoftDeletes;
    
      /**
       * The attributes that should be mutated to dates.
       *
       * @var array
       */
      protected $dates = ['published_at', 'created_at', 'deleted_at'];
    
      /**
       * The attributes that are mass assignable.
       *
       * @var array
       */
      protected $fillable = [
        'user_id',
        'last_user_id',
        'category_id',
        'title',
        'subtitle',
        'slug',
        'page_image',
        'content',
        'meta_description',
        'is_draft',
        'is_original',
        'published_at',
        'wechat_url',
      ];
    
      protected $casts = [
        'content' => 'array'
      ];
    
      /**
       * Set the content attribute.
       *
       * @param $value
       */
      public function setContentAttribute($value)
      {
        $data = [
          'raw' => $value,
          'html' => (new Markdowner)->convertMarkdownToHtml($value)
        ];
    
        $this->attributes['content'] = json_encode($data);
      }
    
      /**
       *           
       *
       * @return array
       */
      public function toSearchableArray()
      {
        $data = [
          'id' => $this->id,
          'title' => $this->title,
          'subtitle' => $this->subtitle,
          'content' => $this->content['html']
        ];
    
        return $data;
      }
    
      public function searchableAs()
      {
        return '_doc';
      }
    }
    Scout 은 검색 색인 에 존재 하 는 모든 기록 을 가 져 오 는 Artisan 명령 import 를 제공 합 니 다.
    
    php artisan scout:import "App\Article"

    Kibana 를 보 세 요.12 개의 데 이 터 를 저 장 했 습 니 다.데이터베이스 항목 과 일치 합 니 다.

    데이터 가 있 으 면 우 리 는 데 이 터 를 조회 할 수 있 는 지 시험 해 볼 수 있다.
    똑 같 습 니 다.명령 을 만 듭 니 다:
    
    class ElasearchCommand extends Command
    {
      /**
       * The name and signature of the console command.
       *
       * @var string
       */
      protected $signature = 'command:search {query}';
    
      /**
       * The console command description.
       *
       * @var string
       */
      protected $description = 'Command description';
    
      /**
       * Create a new command instance.
       *
       * @return void
       */
      public function __construct()
      {
        parent::__construct();
      }
    
      /**
       * Execute the console command.
       *
       * @return mixed
       */
      public function handle()
      {
        $article = Article::search($this->argument('query'))->first();
        $this->info($article->title);
      }
    }

    이것 은 나의 titles 입 니 다.나 는'목록'이라는 키 워드 를 마음대로 입력 해서 찾 을 수 있 는 지 확인 하 겠 습 니 다.

    총결산
    전체 완성:
  • Elasticsearch 설치;
  • Elasticsearch IK 단어 기 플러그 인 설치;
  • Elasticsearch 시각 화 도구 ElasticHQ 와 Kibana 의 설치 와 간단 한 사용;
  • Scout 의 사용;
  • Elasticsearch 와 Scout 를 결합 하여 사용 합 니 다.
  • 다음은 Elasticsearch 에 더 많은 내용 을 저장 하여 자신의 블 로그,공중 번호,자동화 검색 등 장면 에 전문 검색 을 제공 해 야 한다.
    레 퍼 런 스
    명령 행 응용 개발 도 구 를 추천 합 니 다.Laravel Zero
    Artisan 명령 행https://learnku.com/docs/laravel/6.x/artisan/5158
    Scout 전체 텍스트 검색https://learnku.com/docs/laravel/6.x/scout/5191
    How to integrate Elasticsearch in your Laravel App C 2019 edition https://madewithlove.be/how-to-integrate-elasticsearch-in-your-laravel-app-2019-edition/
    Kibana Guide https://www.elastic.co/guide/en/kibana/index.html
    elasticsearch php-api [ https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html](https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html )
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기