>php教程 >PHP开发 >Laravel5.3+Scout+ElasticSearch5.0

Laravel5.3+Scout+ElasticSearch5.0

高洛峰
高洛峰원래의
2016-11-15 14:44:231358검색

시스템 환경

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이고 다른 부분은 사용자가 새로 지정한 경우입니다. , 검색 및 기타 작업 모두에 영향을 미칩니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.