Laravel+Elasticsearch 중국어 검색 방법
16030 단어 LaravelElasticsearch중국어 검색
Elasticsearch
Elasticsearch 는 Apache Lucene(TM)을 기반 으로 한 오픈 소스 검색엔진 으로 오픈 소스 든 전문 분야 든 Lucene 은 지금까지 가장 선진 적 이 고 성능 이 가장 좋 으 며 기능 이 가장 완전한 검색엔진 라 이브 러 리 로 여 겨 질 수 있다.
하지만 루 셀 은 창고 일 뿐이다.그 강력 한 역할 을 발휘 하려 면 자바 를 사용 하고 응용 프로그램 에 통합 해 야 한다.루 셀 은 매우 복잡 하 다.검색 에 관 한 지식 을 깊이 이해 해서 그것 이 어떻게 일 하 는 지 이해 해 야 한다.
Elasticsearch 도 자바 로 색인 을 만 들 고 검색 기능 을 구현 하기 위해 Lucene 을 사용 합 니 다.그러나 간단 하고 연 결 된 RESTful API 를 통 해 전체 텍스트 검색 을 간단하게 하고 Lucene 의 복잡성 을 숨 기 는 것 이 목적 입 니 다.
그러나 Elasticsearch 는 Lucene 과 전문 검색엔진 뿐만 아니 라 다음 과 같이 제공 합 니 다.
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",포트 번호:9200ElasticHQ
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/
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
}
]
}
결합 LaravelElasticsearch 는 공식 적 으로 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 입 니 다.나 는'목록'이라는 키 워드 를 마음대로 입력 해서 찾 을 수 있 는 지 확인 하 겠 습 니 다.
총결산
전체 완성:
레 퍼 런 스
명령 행 응용 개발 도 구 를 추천 합 니 다.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 )
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
단순 Laravel+Vue.js에서 VueUI를 사용하여 로그인 및 등록Laravel에는 웹 팩과 같은 Laravel-Mix가 있는데, 이를 이용해서 Laravel에 Vue.js를 실현할 수 있다. 이번에는 몇 가지 명령을 통해 간단하게 VueUI로 로그인하여 로그인을 할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.