시스템 환경
Ubuntu16.04, ElasticSearch5.0, JDK1.8
ElasticSearch5.0
es5.0을 설치해도 의미가 없고, 공식을 따르면 일반적으로 문서 프로세스가 성공적으로 설치되고 실행될 수 있습니다.
하지만 온라인 환경에서는 여전히 es2.4를 사용하고 있습니다. 첫째, 프로젝트가 크고, 둘째, jdk 버전마다 메모리가 다릅니다.
그리고 es5.0 이후에는 site-plugin 취소로 인해 많은 플러그인을 이전 방식으로 설치할 수 없습니다. 예를 들어 매우 일반적으로 사용되는 elasticSearch-head는 이제 실행해야 합니다. 또는 다른 플러그인을 Nginx 또는 Apache의 www에 넣습니다.
설치 후 발생할 수 있는 작은 문제:
$JAVA_HOME을 찾을 수 없습니다. 실제로 설치되어 있습니다. /etc/default/elasticsearch를 설정하고 이 파일에서 JAVA_HOME=/usr을 찾을 수 있습니다.
환경 메모리가 없으면 설치하지 마세요. es5.0은 내 메모리의 거의 2.5G를 차지합니다. 물론 이제 대부분의 컴퓨터에는 상당한 양의 메모리가 있습니다.
Laravel/Scout 설치 및 구성
.env 파일 하단의 세 줄
SCOUT_DRIVER=customElasticSearch ELASTICSEARCH_INDEX=box ELASTICSEARCH_HOST=localhost:9200
이 세 줄의 구성은 Scout에서 사용하는 엔진과 검색 엔진의 주소를 결정하는 데 사용됩니다.
독자 여러분. 내 드라이버가 elasticsearch가 아닌 customElasticSearch라는 것을 알 수 있습니다.
ElasticSearchEngine을 열고 PerformSearch 메서드를 찾으면 내부에서 이 코드 조각을 찾을 수 있기 때문입니다.
$query = [ 'index' => $this->index, 'type' => $builder->model->searchableAs(), 'body' => [ 'query' => [ 'filtered' => [ 'filter' => $filters, 'query' => [ 'bool' => [ 'must' => $matches ] ], ], ], ], ];
search 메서드를 직접 실행하면 자세한 내용은 공식 홈페이지 주소를 참고해주세요.
단, 패키지 코드는 직접 변경할 수 없습니다. 다행히 Scout에서는 자동 Define Engine을 제공합니다.
그래서 새로운 customElasticSearchEngine을 생성합니다. , elasticSearchEngine을 상속하고, PerformSearch 메소드를 다시 작성했습니다.
这只是演示, 要真使用以后一定要改 $matches[] = [ 'match' => [ '字段名' => $builder->query ] ];
$query = [ 'index' => $this->index, 'type' => $builder->model->searchableAs(), 'body' => [ 'query' => [ 'bool' => [ 'filter' => $filters, 'must' => $matches, ], ], ], ];
Scout Pitfall을 사용할 수 있습니다
데이터베이스의 테이블에 필드에 id라는 자동 증가 기본 키가 있지만 elasticSearch가 데이터 테이블의 ID를 es 문서의 ID로 사용하지 않으려면 모델의 $primaryKey 및 public $incrementing = false를 변경해야 합니다. , es의 id 역할을 할 현재 데이터 테이블의 다른 값을 지정할 수 있습니다. es 데이터의 _id 중 일부가 데이터베이스의 id이고 다른 부분은 사용자가 새로 지정한 경우입니다. , 검색 및 기타 작업 모두에 영향을 미칩니다.