Ein Schulprojekt aus dem Kursprogramm 2, Gruppe 2, professioneller Bachelor "angewendet" bei Erasmumshogeschool Brüssel.
Suchmaschinenantrag für Versicherungsdokumente. Versicherungsunternehmen speichern Dokumente über Gesetzgebung, Rechtsprechung und rechtliche Doktrin in ihrem jeweiligen Bereich. Ziel ist es, den Mitarbeitern eine benutzerfreundliche Suchmaschinenanwendung zu bieten, die auf den Algorythmen des Elasticsearch-Frameworks basiert.
| Komponente | Version |
|---|---|
| Linux Ubuntu | |
| Fscrawler | |
| Elasticsarch | 6.8 |
| Elasticsarch-Php | 6.7 |
| Php | 7.4.10 (CLI) |
| Komponist | 2.0.6 |
| Laravel Installer | 4.1.0 |
| Mysql |
Hinweis: FScrawler VXXXX ist nur mit Elasticsearch 6.8 kompatibel. Erfordern Sie folglich Paket Elasticsearch-Php V6.7 in Ihrer Datei laravel composer.json
Die vollständige Dokumentation finden Sie hier. Dokumente werden im Repo unter /docs /gespeichert. Wenn Sie also einen Tippfehler oder ein Problem sehen, senden Sie bitte eine PR, um es zu beheben!
Wir stellen auch einen Code -Beispielgenerator für PHP mit dem Skript util/GenerateDocExamples.php an. Dieser Befehl analysiert die aus dieser JSON -Spezifikation erstellte Datei util/alternative_report.spec.json und generiert die PHP -Beispiele für den Wert für den Wert. Die Beispiele werden im asciidoc -Format im Ordner docs/examples gespeichert.
Die empfohlene Methode zur Installation von Elasticsearch-Php ist über Komponist.
Fügen Sie elasticsearch/elasticsearch als Abhängigkeit in die composer.json -Datei Ihres Projekts hinzu (ändern Sie die Version zu Ihrer Version von Elasticsearch, z. B. für ES 7.0):
{
"require" : {
"elasticsearch/elasticsearch" : " ^7.0 "
}
}Komponist herunterladen und installieren:
curl -s http://getcomposer.org/installer | phpInstallieren Sie Ihre Abhängigkeiten:
php composer.phar installBenötigen Autoloader des Komponisten
Composer erstellt auch eine Autoloaddatei, die in der Lage ist, alle Klassen in einer der von ihr heruntergeladenen Bibliotheken zu automatisieren. Um es zu verwenden, fügen Sie einfach die folgende Zeile zum Bootstrap -Prozess Ihres Code hinzu:
<?php
use Elasticsearch ClientBuilder ;
require ' vendor/autoload.php ' ;
$ client = ClientBuilder:: create ()-> build ();Weitere Informationen zur Installation von Komponisten, Konfigurieren von Autoloading und anderen Best-Practices, um Abhängigkeiten unter GetComposer.org zu definieren.
Version 7.0 dieser Bibliothek erfordert mindestens PHP Version 7.1. Darüber hinaus müssen die native JSON -Erweiterung Version 1.3.7 oder höher sein.
| Elasticsarch-Php Branch | PHP -Version |
|---|---|
| 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 |
Da Insuraquest Laravel Jetstream verwendet, enthält es Login, Registrierung, E-Mail-Überprüfung, Zwei-Faktor-Authentifizierung und Sitzungsverwaltung. Jetstream verwendet Laravel Festify, ein Front-End-Agnostic-Authentifizierungs-Backend für Laravel.
In der Konfigurationsdatei config/forthify.php können Sie die verschiedenen Aspekte anpassen. Wählen Sie aus, welche Aspekte Sie in Ihrem Projekt implementieren möchten.
Die auf Autorisierungsanforderung ausgeführte Logik kann in App Actions Fortify gefunden und geändert werden.
Weitere Informationen und Dokumentationen zu Jetstream finden Sie auf der Jetstream -Website.
Insuraquest implementiert die Autorisierung durch den Attribut-Typ "Typ", der in jedem Benutzer-Instanz enthalten ist. Es gibt vier Typen: Gast, Benutzer, Bibliothekar und Administrator. Typen werden kaskadiert. Jede neue Ebene hat die Berechtigungen der Ebene unter + zusätzliche Berechtigungen.
Die Autorisierung wird auf den verschiedenen Routen (Web.php) durchgesetzt. Bei gemischten Ansichten wird es auch auf der Aussichtsebene durchgesetzt, indem der native laravel @can und @Cannot implementiert wird.
Die Typen können in der Datenbank direkt oder auf der "Benutzerverwaltung" angepasst werden, wenn Sie mit einem AdminCoccount angemeldet sind.
Wenn ein Besucher noch nicht angemeldet ist, wird er in den Login-Screen umgeleitet. Standardmäßig - wenn ein neuer Benutzer registriert wird - wird ihm der Typ "Gast" zugewiesen. Er wird in der Lage sein, den Grand -Page und die Dokumentation zu sehen, kann jedoch keine Dokumente abfragen. Ein Benutzer kann Dokumente abfragen, öffnen und mailen. Ein Bibliothekar kann neue Dateien hochladen, Dateien löschen und die Tags ändern. Ein Administrator kann alle Benutzer, ihre Informationen anzeigen und seinen Typ anpassen.
Beschreibung der Einrichtung der Bereitstellung.
"external" : {
"properties" : {
"title" : {
"type" : " text "
},
"language" : {
"type" : " keyword "
},
"date_published" : {
"type" : " date "
},
"issuer" : {
"type" : " keyword "
},
"category" : {
"type" : " keyword "
},
"tag" : {
"type" : " keyword "
}
}
}Als robuster als eingebauter Laravel Server.
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:linkIn Elasticsearch-Php wird fast alles von assoziativen Arrays konfiguriert. Der Rest -Endpunkt, Dokument und optionale Parameter - alles ist ein assoziatives Array.
Um ein Dokument zu indexieren, müssen wir drei Informationen angeben: Index, ID und eine Dokumentkörper. Dies geschieht durch Erstellen eines assoziativen Arrays von Schlüssel: Wertpaare. Das Anforderungsgremium ist selbst ein assoziatives Array mit Schlüssel: Wertpaare, die den Daten in Ihrem Dokument entsprechen:
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id ' ,
' body ' => [ ' testField ' => ' abc ' ]
];
$ response = $ client -> index ( $ params );
print_r ( $ response );Die Antwort, die Sie zurückgewinnen, gibt an, dass das Dokument im von Ihnen angegebenen Index erstellt wurde. Die Antwort ist ein assoziatives Array, das eine dekodierte Version des JSON enthält, die Elasticsearch zurückkehrt:
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
)Lassen Sie uns das Dokument erhalten, das wir gerade indiziert haben. Dies gibt einfach das Dokument zurück:
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id '
];
$ response = $ client -> get ( $ params );
print_r ( $ response ); Die Antwort enthält einige Metadaten (Index, Version usw.) sowie ein _source -Feld.
Array
(
[_index] => my_index
[_type] => _doc
[_id] => my_id
[_version] => 1
[_seq_no] => 0
[_primary_term] => 1
[found] => 1
[_source] => Array
(
[testField] => abc
)
) Wenn Sie das Feld _source direkt abrufen möchten, gibt es die getSource -Methode:
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id '
];
$ source = $ client -> getSource ( $ params );
print_r ( $ source ); Die Antwort ist nur der Wert _source :
Array
(
[testField] => abc
)Die Suche ist ein Markenzeichen von Elasticsearch. Lassen Sie uns also eine Suche durchführen. Wir werden die Match -Abfrage als Demonstration verwenden:
$ params = [
' index ' => ' my_index ' ,
' body ' => [
' query ' => [
' match ' => [
' testField ' => ' abc '
]
]
]
];
$ response = $ client -> search ( $ params );
print_r ( $ response ); Die Antwort unterscheidet sich etwas von den vorherigen Antworten. Wir sehen einige Metadaten ( took , timed_out usw.) und ein Array mit dem Namen hits . Dies repräsentiert Ihre Suchergebnisse. Innerhalb von hits befindet sich ein weiteres Array mit dem Namen hits , das individuelle Suchergebnisse enthält:
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
)
)
)
)
)Okay, lass uns das Dokument löschen, das wir zuvor hinzugefügt haben:
$ params = [
' index ' => ' my_index ' ,
' id ' => ' my_id '
];
$ response = $ client -> delete ( $ params );
print_r ( $ response ); Sie werden feststellen, dass dies eine identische Syntax für die get -Syntax ist. Der einzige Unterschied ist der Vorgang: delete anstatt zu get . Die Antwort bestätigt, dass das Dokument gelöscht wurde:
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
)Aufgrund der dynamischen Natur von Elasticsearch hat das erste Dokument automatisch einen Index mit einigen Standardeinstellungen hinzugefügt. Lassen Sie uns diesen Index löschen, da wir später unsere eigenen Einstellungen angeben möchten:
$ deleteParams = [
' index ' => ' my_index '
];
$ response = $ client -> indices ()-> delete ( $ deleteParams );
print_r ( $ response );Die Antwort:
Array
(
[acknowledged] => 1
)Nachdem wir frisch anfangen (keine Daten oder Index), fügen wir einen neuen Index mit einigen benutzerdefinierten Einstellungen hinzu:
$ params = [
' index ' => ' my_index ' ,
' body ' => [
' settings ' => [
' number_of_shards ' => 2 ,
' number_of_replicas ' => 0
]
]
];
$ response = $ client -> indices ()-> create ( $ params );
print_r ( $ response );Elasticsearch erstellt nun diesen Index mit Ihren ausgewählten Einstellungen und gibt eine Bestätigung zurück:
Array
(
[acknowledged] => 1
) Ein Bibliothekar hat die Möglichkeit, neue Dateien hochzuladen. Beim Hochladen eines Dokuments können Sie dem hochgeladenen Dokument Tags hinzufügen. Der Inhalt für die Tags wird aus einer MySQL -Tabelle gezogen und dem Formular hinzugefügt.
FileUploadController.php
$ this ->validate( $ request , [
' title ' => ' required ' ,
' language ' => ' required ' ,
' date ' => ' required|date ' ,
' issuer ' => ' required ' ,
' category ' => ' required ' ,
' tag ' => ' required ' ,
' file ' => ' required|mimes:pdf|max:2048 '
]Wenn ein Dokument hochgeladen wird, werden die Datei und die Tags an FSCRAWLER veröffentlicht, wodurch das Dokument vorhanden ist, bevor wir zu unserem Elasticsearch -Knoten hinzugefügt werden.
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 ;
} Für Formularlayout wird ein Plugin hinzugefügt -> Tailwind.config.js
https://tailwindcss-custom-forms.netlify.app/
plugins: [
require ( ' @tailwindcss/custom-forms ' ),
] Nachdem ein Benutzer alle seine Suchergebnisse erhalten hat, kann er weitere Details zu den Ergebnissen anzeigen.
Hier hat er die Möglichkeit, die angezeigte PDF zu bearbeiten, zu löschen oder zu mailen.
Modifizierte oder erstellte Dateien für die Mail -Funktionalität sind
Befehle verwendete Laravel Mailable -Markdown -Klasse, die zum Erstellen von E -Mails verwendet werden.
php artisan make:mail EmailInsuraquest --markdown=Email.insuraEmail
Mail -Controller, im Wesentlichen definieren wir die Logik, um die Liste des Benutzers anzuzeigen. Führen Sie den Befehl aus, um den Controller zu erstellen.
php artisan make:controller MailController
Möglichkeit zum Testen der E -Mail -Funktion http: // localhost: 8000/send -email -> sendet Mail an mailstrap (Konto BART)
TODO: Implementieren Sie die Mail -Funktionalität in das eine Suchergebnis
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 aboveDas war nur ein Crash-Course-Überblick über den Client und seine Syntax. Wenn Sie mit Elasticsearch vertraut sind, werden Sie feststellen, dass die Methoden genau wie REST -Endpunkte benannt sind.
Sie werden auch feststellen, dass der Client auf eine Weise konfiguriert ist, die eine einfache Entdeckung über die IDE erleichtert. Alle Kernaktionen sind unter dem $client -Objekt verfügbar (Indizierung, Suchen, Erhalten usw.). Die Index- und Cluster-Verwaltung befinden sich unter den Objekten $client->indices() und $client->cluster() .
Schauen Sie sich den Rest der Dokumentation an, um zu sehen, wie der gesamte Client funktioniert.
Bitte beachten Sie, dass dieses Projekt für die Verwendung im Schulkontext verwendet wird. Für die Weiterentwicklung wenden Sie sich bitte an TE
Der Benutzer kann auswählen, welche Lizenz er verwenden möchte. Da es keine diskriminierende ausführbare Datei- oder Verteilungsbündel zur Differenzierung der Lizenzierung gibt, sollte der Benutzer seine Lizenzauswahl extern dokumentieren, falls die Bibliothek erneut verteilt wird. Wenn keine ausdrückliche Wahl getroffen wird, ist die Annahme, dass die Umverteilung den Regeln beider Lizenzen folgt.