코스 프로그래밍 프로젝트 2, 그룹 2, 전문 학사 "Erasmumshogeschool Brussel에서"Applied It "의 학교 프로젝트.
보험 서류 검색 엔진 신청서. 보험 회사는 특정 분야의 입법, 법학 및 법적 교리에 관한 문서를 저장합니다. 목표는 직원들에게 Elasticsearch 프레임 워크의 AlgoryThms를 기반으로 사용하기 쉬운 검색 엔진 애플리케이션을 제공하는 것입니다.
| 요소 | 버전 |
|---|---|
| 리눅스 우분투 | |
| fscrawler | |
| Elasticsearch | 6.8 |
| Elasticsearch-PHP | 6.7 |
| PHP | 7.4.10 (CLI) |
| 작곡가 | 2.0.6 |
| LARAVEL 설치 프로그램 | 4.1.0 |
| MySQL |
참고 : FSCRAWLER VXXXX는 ElasticSearch 6.8과 호환됩니다. 결과적으로 Laravel Composer.json 파일에 Package Elasticsearch-PHP v6.7이 필요합니다.
전체 문서는 여기에서 찾을 수 있습니다. 문서는 /Docs / /Docs /RELENDEND에 저장되므로 오타 나 문제가 표시되면 PR을 제출하여 해결하십시오!
또한 util/GenerateDocExamples.php 스크립트를 사용하여 PHP 용 코드 예제 생성기를 제공합니다. 이 명령은이 JSON 사양에서 생성 된 util/alternative_report.spec.json 파일을 구문 분석하고 각 다이제스트 값에 대한 PHP 예제를 생성합니다. 이 예제는 docs/examples 폴더 아래 Asciidoc 형식으로 저장됩니다.
Elasticsearch-PHP를 설치하는 것이 권장되는 방법은 작곡가를 통해입니다.
elasticsearch/elasticsearch 프로젝트 composer.json 파일의 종속성으로 추가하십시오 (예 : ES 7.0의 ElasticSearch 버전에 맞는 변경 버전) :
{
"require" : {
"elasticsearch/elasticsearch" : " ^7.0 "
}
}작곡가 다운로드 및 설치 :
curl -s http://getcomposer.org/installer | php의존성 설치 :
php composer.phar install작곡가의 자동 로더가 필요합니다
Composer는 또한 다운로드하는 모든 라이브러리의 모든 클래스를 자동로드 할 수있는 자동로드 파일을 준비합니다. 이를 사용하려면 코드의 부트 스트랩 프로세스에 다음 줄을 추가하십시오.
<?php
use Elasticsearch ClientBuilder ;
require ' vendor/autoload.php ' ;
$ client = ClientBuilder:: create ()-> build ();getComposer.org에서 종속성을 정의하기 위해 작곡가를 설치하고 자동로드를 구성하는 방법에 대한 자세한 내용을 확인할 수 있습니다.
이 라이브러리의 버전 7.0에는 최소한 PHP 버전 7.1이 필요합니다. 또한 기본 JSON 확장은 버전 1.3.7 이상이어야합니다.
| Elasticsearch-PHP 지점 | PHP 버전 |
|---|---|
| 7.0 | > = 7.1.0 |
| 6.0 | > = 7.0.0 |
| 5.0 | > = 5.6.6 |
| 2.0 | > = 5.4.0 |
| 0.4, 1.0 | > = 5.3.9 |
Insuraquest는 Laravel JetStream을 사용하기 때문에 로그인, 등록, 이메일 확인, 2 단계 인증 및 세션 관리가 포함됩니다. JetStream은 Laravel Fortify를 사용합니다. Laravel Fortify는 Laravel에 대한 프론트 엔드 불가지론 인증 백엔드입니다.
config/ortify.php 구성 파일에서 다양한 측면을 사용자 정의하고 프로젝트에서 구현할 측면을 선택할 수 있습니다.
승인 요청에 따라 실행되는 논리는 App Action orportify에서 찾아서 수정할 수 있습니다.
JetStream에 대한 자세한 정보 및 문서는 JetStream 웹 사이트에서 찾을 수 있습니다.
Insuraquest는 각 사용자 인스턴스에 포함 된 '유형'속성을 통해 승인을 구현합니다. 게스트, 사용자, 사서 및 관리자의 네 가지 유형이 있습니다. 유형은 계단식으로 만들어집니다. 각 새로운 수준에는 아래 레벨의 권한이 있으며 추가 권한이 있습니다.
권한은 다른 경로 (Web.php)에서 시행됩니다. 혼합 뷰에서는 기본 Laravel @Can 및 @Cannot을 구현하여 시야 수준에서 시행됩니다.
관리자로 가입 할 때 데이터베이스 또는 '사용자 관리'페이지에서 유형을 조정할 수 있습니다.
방문자가 아직 로그인되지 않으면 로그인 스크린으로 다시 라우팅됩니다. 기본적으로 - 새 사용자가 등록되면 '게스트'유형이 할당됩니다. 그는 착륙장과 문서를 볼 수 있지만 문서를 쿼리 할 수는 없습니다. 사용자는 문서를 쿼리하고 열어서 우편으로 보낼 수 있습니다. 사서는 새 파일을 업로드하고 파일을 삭제하며 태그를 변경할 수 있습니다. 관리자는 모든 사용자, 정보를보고 유형을 조정할 수 있습니다.
배포 설정에 대한 설명.
"external" : {
"properties" : {
"title" : {
"type" : " text "
},
"language" : {
"type" : " keyword "
},
"date_published" : {
"type" : " date "
},
"issuer" : {
"type" : " keyword "
},
"category" : {
"type" : " keyword "
},
"tag" : {
"type" : " keyword "
}
}
}내장 Laravel 서버보다 더 강력한 것으로 간주됩니다.
server {
listen 80 ;
server_name 10.3.50.7 ;
root /var/www/insuraquest_production/insuraquest/public ;
add_header X-Frame-Options " SAMEORIGIN " ;
add_header X-XSS-Protection " 1; mode=block " ;
add_header X-Content-Type-Options " nosniff " ;
index index.php ;
charset utf-8 ;
location / {
try_files $uri $uri / /index.php ? $query_string ;
}
location = /favicon.ico { access_log off ; log_not_found off ; }
location = /robots.txt { access_log off ; log_not_found off ; }
error_page 404 /index.php ;
location ~ . php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock ;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name ;
include fastcgi_params ;
}
location ~ / . ( ? ! well-known). * {
deny all ;
}
}php artisan migrate:fresh --seedgit init --bare /home/student/insuraquest/bare_project.init #! /bin/bash
# check out the files
git --work-tree=/var/www/insuraquest_production --git-dir=/home/student/insuraquest/bare_project.git checkout -f
chmod +x /path/to/bare_project.git/hooks/post-receivegit remote add live ' [email protected]:/home/student/insuraquest/bare_project.git '
git push --set-upstream live maincomposer update chgrp -R www-data insuraquest_productionphp artisan storage:linkElasticsearch-PHP에서는 거의 모든 것이 연관 배열로 구성됩니다. 나머지 엔드 포인트, 문서 및 선택적 매개 변수 - 모든 것은 연관 배열입니다.
문서를 색인하려면 인덱스, ID 및 문서 본문의 세 가지 정보를 지정해야합니다. 이것은 값 값의 연관 배열을 구성하여 수행됩니다. 요청 본문 자체는 키를 가진 연관 배열입니다. 문서의 데이터에 해당하는 값 쌍입니다.
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id ' ,
' body ' => [ ' testField ' => ' abc ' ]
];
$ response = $ client -> index ( $ params );
print_r ( $ response );돌아 오는 응답은 문서가 지정된 인덱스에서 생성되었음을 나타냅니다. 응답은 Elasticsearch가 반환하는 Decoded 버전의 JSON을 포함하는 연관 배열입니다.
Array
(
[_index] => my_index
[_type] => _doc
[_id] => my_id
[_version] => 1
[result] => created
[_shards] => Array
(
[total] => 1
[successful] => 1
[failed] => 0
)
[_seq_no] => 0
[_primary_term] => 1
)방금 인덱싱 한 문서를 받자. 이것은 단순히 문서를 반환합니다.
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id '
];
$ response = $ client -> get ( $ params );
print_r ( $ response ); 응답에는 일부 메타 데이터 (인덱스, 버전 등)와 _source 필드가 포함되어 있으며,이 필드는 Elasticsearch로 보낸 원본 문서입니다.
Array
(
[_index] => my_index
[_type] => _doc
[_id] => my_id
[_version] => 1
[_seq_no] => 0
[_primary_term] => 1
[found] => 1
[_source] => Array
(
[testField] => abc
)
) _source 필드를 직접 검색하려면 getSource 메소드가 있습니다.
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id '
];
$ source = $ client -> getSource ( $ params );
print_r ( $ source ); 응답은 _source 값입니다.
Array
(
[testField] => abc
)검색은 Elasticsearch의 특징이므로 검색을 수행하겠습니다. 우리는 경기 쿼리를 데모로 사용할 것입니다.
$ params = [
' index ' => ' my_index ' ,
' body ' => [
' query ' => [
' match ' => [
' testField ' => ' abc '
]
]
]
];
$ response = $ client -> search ( $ params );
print_r ( $ response ); 응답은 이전 응답과 약간 다릅니다. 우리는 메타 데이터 ( took , timed_out 등)와 hits 라는 배열이 보입니다. 이것은 검색 결과를 나타냅니다. hits 내부에는 개별 검색 결과 hits 포함 된 또 다른 배열이 있습니다.
Array
(
[took] => 33
[timed_out] =>
[_shards] => Array
(
[total] => 1
[successful] => 1
[skipped] => 0
[failed] => 0
)
[hits] => Array
(
[total] => Array
(
[value] => 1
[relation] => eq
)
[max_score] => 0.2876821
[hits] => Array
(
[ 0 ] => Array
(
[_index] => my_index
[_type] => _doc
[_id] => my_id
[_score] => 0.2876821
[_source] => Array
(
[testField] => abc
)
)
)
)
)좋아, 앞서 추가 한 문서를 삭제합시다.
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id '
];
$ response = $ client -> delete ( $ params );
print_r ( $ response ); 이것이 get 구문과 동일한 구문임을 알 수 있습니다. 유일한 차이점은 작동입니다. get 대신 delete . 응답은 문서가 삭제되었음을 확인합니다.
Array
(
[_index] => my_index
[_type] => _doc
[_id] => my_id
[_version] => 2
[result] => deleted
[_shards] => Array
(
[total] => 1
[successful] => 1
[failed] => 0
)
[_seq_no] => 1
[_primary_term] => 1
)Elasticsearch의 동적 특성으로 인해 첫 번째 문서는 일부 기본 설정으로 인덱스를 자동으로 구축했습니다. 나중에 자체 설정을 지정하려면 해당 색인을 삭제 해 봅시다.
$ deleteParams = [
' index ' => ' my_index '
];
$ response = $ client -> indices ()-> delete ( $ deleteParams );
print_r ( $ response );응답 :
Array
(
[acknowledged] => 1
)이제 우리는 Fresh (데이터 나 색인 없음)를 시작 했으므로 몇 가지 사용자 정의 설정이 포함 된 새 인덱스를 추가하겠습니다.
$ params = [
' index ' => ' my_index ' ,
' body ' => [
' settings ' => [
' number_of_shards ' => 2 ,
' number_of_replicas ' => 0
]
]
];
$ response = $ client -> indices ()-> create ( $ params );
print_r ( $ response );Elasticsearch는 이제 선택한 설정으로 해당 색인을 생성하고 승인을 반환합니다.
Array
(
[acknowledged] => 1
) 사서는 새 파일을 업로드 할 가능성이 있습니다. 문서를 업로드 할 때 업로드 된 문서에 태그를 추가 할 수 있습니다. 태그의 내용은 MySQL 테이블에서 가져와 양식에 추가됩니다.
FileUploadController.php
$ this ->validate( $ request , [
' title ' => ' required ' ,
' language ' => ' required ' ,
' date ' => ' required|date ' ,
' issuer ' => ' required ' ,
' category ' => ' required ' ,
' tag ' => ' required ' ,
' file ' => ' required|mimes:pdf|max:2048 '
]문서가 업로드되면 파일과 태그가 fscrawler에 게시되며 Elasticsearch 노드에 추가하기 전에 문서를 색인화합니다.
FileUploadController.php
$ file = $ request -> file ( ' file ' );
$ pathname = $ file -> store ( ' public ' );
$ fully_qualified_pathname = storage_path ( ' app/ ' . $ pathname );
$ client = new Client ();
try {
$ client -> request ( ' POST ' , ' http://127.0.0.1:8080/fscrawler/_upload ' ,
);
} catch ( GuzzleException $ e ) {
echo $ e ;
} 양식 레이아웃에 대한 플러그인이 추가됩니다 -> tailwind.config.js
https://tailwindcss-custom-forms.netlify.app/
plugins: [
require ( ' @tailwindcss/custom-forms ' ),
] 사용자가 모든 검색 결과를 얻은 후에는 결과에 대한 자세한 내용을 볼 수 있습니다.
여기서 그는 표시된 PDF를 편집, 삭제 또는 우편으로 할 수 있습니다.
메일 기능을 위해 수정 또는 생성 된 파일은 다음과 같습니다
명령은 전자 메일 생성에 사용되는 Laravel Mailable Markdown 클래스를 사용했습니다.
php artisan make:mail EmailInsuraquest --markdown=Email.insuraEmail
메일 컨트롤러, 본질적으로 우리는 사용자 목록을 표시 할 논리를 정의합니다. 명령을 실행하여 컨트롤러를 작성하십시오.
php artisan make:controller MailController
이메일 기능을 테스트 할 가능성 http : // localhost : 8000/send -email-> 메일을 MailTrap (계정 바트)로 전송합니다.
TODO : 하나의 검색 결과에 메일 기능을 구현하십시오.
use GuzzleHttp Ring Client MockHandler ;
use Elasticsearch ClientBuilder ;
// The connection class requires 'body' to be a file stream handle
// Depending on what kind of request you do, you may need to set more values here
$ handler = new MockHandler ([
' status ' => 200 ,
' transfer_stats ' => [
' total_time ' => 100
],
' body ' => fopen ( ' somefile.json ' ),
' effective_url ' => ' localhost '
]);
$ builder = ClientBuilder:: create ();
$ builder -> setHosts ([ ' somehost ' ]);
$ builder -> setHandler ( $ handler );
$ client = $ builder -> build ();
// Do a request and you'll get back the 'body' response above그것은 단지 클라이언트와 그 구문에 대한 충돌 코스 개요였습니다. Elasticsearch에 익숙하다면 메소드의 이름이 Rest 엔드 포인트와 유사합니다.
또한 클라이언트가 IDE를 통해 쉽게 발견 할 수있는 방식으로 구성되어 있음을 알 수 있습니다. 모든 핵심 작업은 $client Object (인덱싱, 검색, 얻기 등)에서 사용할 수 있습니다. 인덱스 및 클러스터 관리는 각각 $client->indices() 및 $client->cluster() 객체 아래에 있습니다.
전체 고객의 작동 방식을 확인하려면 나머지 문서를 확인하십시오.
이 프로젝트는 학교 상황에서 사용하기위한 것입니다. 추가 개발은 TE에 문의하십시오
사용자는 사용하려는 라이센스를 선택할 수 있습니다. 라이센스를 차별화하기 위해 차별적 인 실행 가능 또는 배포 번들이 없으므로 라이브러리가 재분배되는 경우 라이센스 선택을 외부로 문서화해야합니다. 명백한 선택이 없다면, 재분배는 두 라이센스의 규칙을 준수한다고 가정합니다.