Systemumgebung
Ubuntu16.04, ElasticSearch5.0, JDK1.8
ElasticSearch5.0
Es macht keinen Sinn, es5.0 zu installieren, Befolgen Sie einfach den offiziellen Dokumentprozess, der im Allgemeinen erfolgreich installiert und ausgeführt werden kann. In der Online-Umgebung verwenden andere jedoch immer noch es2.4. Erstens ist das Projekt groß und zweitens haben verschiedene Versionen von JDK unterschiedliche Speicher
Und nach es5.0 können viele Plug-Ins aufgrund der Abschaffung des Site-Plugins nicht mehr auf die bisherige Weise installiert werden. Beispielsweise muss das sehr häufig verwendete Plug-In „ElasticSearch-Head“ jetzt ausgeführt werden über Grunt. Oder andere Plug-Ins werden in das WWW von Nginx oder Apache gelegt.
Kleine Probleme, die nach der Installation auftreten können:
$JAVA_HOME kann nicht gefunden werden, aber es ist tatsächlich installiert. Sie können /etc/default/elasticsearch festlegen und JAVA_HOME=/usr in dieser Datei finden /local/java/jdk1.8.0_101/jre;
Nicht installieren, wenn der Umgebungsspeicher ist zu klein. Es5.0 nimmt fast 2,5 G meines Speichers ein. Natürlich haben die meisten Computer jetzt ziemlich viel Speicher.
Installieren und konfigurieren Sie Laravel/Scout
Fügen Sie diese hinzu drei Zeilen am Ende der .env-Datei
SCOUT_DRIVER=customElasticSearch
ELASTICSEARCH_INDEX=box
ELASTICSEARCH_HOST=localhost:9200
Nach dem Login kopieren
Diese drei Konfigurationszeilen werden von Scout verwendet, um zu bestimmen, welche Engine Sie verwenden und die Adresse der Suchmaschine.
Leser Möglicherweise stellen Sie fest, dass mein Treiber „customElasticSearch“ und nicht „elasticalsearch“ ist.
Denn wenn Sie ElasticSearchEngine öffnen und die performSearch-Methode finden, finden Sie diesen Code darin.
$query = [
'index' => $this->index,
'type' => $builder->model->searchableAs(),
'body' => [
'query' => [
'filtered' => [
'filter' => $filters,
'query' => [
'bool' => [
'must' => $matches
]
],
],
],
],
];
Nach dem Login kopieren
Wenn Sie die Suchmethode direkt ausführen, werden Sie dies tun Bitte beachten Sie, dass der Filtervorgang abgebrochen wurde.
Sie können den Paketcode jedoch nicht direkt ändern.
Also erstellen wir eine neue benutzerdefinierteElasticSearchEngine , erben Sie elasticSearchEngine und schreiben Sie die performSearch-Methode neu. Darin habe ich zwei Stellen geändert:
这只是演示, 要真使用以后一定要改
$matches[] = [
'match' => [
'字段名' => $builder->query
]
];
Nach dem Login kopieren
$query = [
'index' => $this->index,
'type' => $builder->model->searchableAs(),
'body' => [
'query' => [
'bool' => [
'filter' => $filters,
'must' => $matches,
],
],
],
];
Nach dem Login kopieren
Es ist möglich, Scout Pitfall zu verwenden
Wenn Ihre Tabelle in der Datenbank eine hat Feld mit dem Namen id mit einem automatisch inkrementierten Primärschlüssel, aber Sie möchten nicht, dass ElasticSearch die ID der Datentabelle als ID des es-Dokuments verwendet, dann müssen Sie den $primaryKey des Modells ändern Und public $incrementing = false; , sodass Sie andere Werte der aktuellen Datentabelle angeben können, die als ID von es dienen sollen. Wenn ein Teil der _id der es-Daten die ID der Datenbank ist und der andere Teil von Ihnen neu angegeben wird Dies führt dazu, dass sowohl Ihre Suche als auch andere Vorgänge beeinträchtigt werden.