ElasticSearch
Benötigt Java8 oder höher (Download)
#ES-Installation
$ brew install elasticsearch
#Starten Sie ES
$ /usr/local/Cellar/elasticsearch/7.8.1/bin/elasticsearch
or
$ elasticsearch
#Funktionsprüfung
$ curl http://localhost:9200
--kuromoji (separate Schrift) --ICU (Zeichennormalisierungsfilter)
$ elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-7.8.1.zip
$ elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-7.8.1.zip
Struktur von ES im Vergleich zu RDB (Referenz)
Cluster > Node > Index( = DB) > Type(=Table) >Document( =Row)
#Indexliste
curl -X GET http://localhost:9200/_cat/indices
#Indexerstellung
curl -XPUT http://localhost:9200/Indexname
#Index löschen
curl -XDELETE localhost:9200/Indexname
#Dokument hinzufügen
curl -XPOST http://localhost:9200/Indexname/Modellname/ -d '{
"field_01": "hoge1",
}'
#Holen Sie sich doc
curl -XGET http://localhost:9200/new_index/_search
curl -H "Content-Type: application/json" -XGET localhost:9200/Indexname/_search\?pretty -d '{"size":100}'
※?Formatieren Sie das Ergebnis mit hübsch und Ausgabe
※ -d '{"size":100}'Wenn Sie die Anzahl der Fälle nicht angeben, gibt es nur maximal 10 Fälle.
* Beim Senden von json "-H "Content-Type: application/json""Ist notwendig
#Dokumentsuche
curl -H "Content-Type: application/json" -XGET localhost:9200/Indexname/_search\?pretty -d'
{
"query": {
"match": {
Artikelname:Suchwert
}
}
}'
#Dokument hinzufügen
curl -H "Content-Type: application/json" -XPOST http://localhost:9200/Indexname/new/ -d'{
Artikelname:Wert
}'
Kibana Da es eine Request Builder-ähnliche Funktion hat, fügen Sie sie bei Bedarf für die Entwicklung hinzu
# install
$ brew install kibana
$ brew info kibana
#Anlaufen
$ kibana
#Greifen Sie auf das Dashboard zu
http://localhost:5601/app/kibana#/dev_tools/console
#Indexerstellung
<Modellname>.create_index
#Importieren Sie alle DB-Daten erneut
<Modellname>__elasticsearch__.import
#Beispiel für die Datensuche
<Modellname>.search query:{ match_all: {}}
<Modellname>.search query:{ match: {title:”hello”}}
Führen Sie sidekiq async während der Modelländerungsverarbeitung aus (ArticleIndexer.perform_async
) → Von Redis aufgerufen und erstellen Sie asynchron einen ElasticSearch-Index ( models / concerts / article_searchable
).
sidekiq
Erforderlich für asynchrone Indexaktualisierungen. Von Redis gekaut und von Elastic Search asynchron indiziert.
$ brew install redis
$ gem 'sidekiq'
$ bundle exec sidekiq -C config/sidekiq.yml
-Überprüfen Sie die Indexeinstellung (Wenn Sie den Analysator angeben, können Sie ihn überprüfen.)
curl -H "Content-Type: application/json" http://localhost:9200/articles-test/_mappings\?pretty
curl -H "Content-Type: application/json" http://localhost:9200/articles-test/\?pretty
-Überprüfen Sie, wie die Abfrage durch es aufgeteilt wird (separates Schreiben == tokenize)
curl -H "Content-Type: application/json" -XGET localhost:9200/articles-test/_search\?pretty -d'
{
"query": {
"match": {
"title": "Tokio"
}
}
}'
Grundsätzlich ist es keine exakte Übereinstimmung. Bei der Volltextsuche wie Englisch werden Wörter durch Leerzeichen getrennt und jedes Wort wird geteilt, um einen Index zu erstellen. Da die Wörter mit den geteilten Wörtern übereinstimmen, ist es nicht immer möglich, nach einer genauen Übereinstimmung zu suchen.
kuromoji und ngram sind die Einstellungen für diese Abteilung. Die Übereinstimmungsrate ist für ngram höher.
Was icu macht, ist gut darin, Kana in halber Breite zu verwenden und es als gewöhnliche Zeichen zu indizieren. Es ist wie ein Filter, der japanische UTF-8-Zeichen gut konvertiert.
https://dev.classmethod.jp/articles/es-02/ https://tech-blog.rakus.co.jp/entry/20191002/elasticsearch#Analyzer%E3%81%A8%E3%81%AF https://medium.com/hello-elasticsearch/elasticsearch-833a0704e44b https://qiita.com/shin_hayata/items/41c07923dbf58f13eec4
https://blog.chocolapod.net/momokan/entry/114
Bei der Abfrage (Volltextsuche) wird die Punktzahl beim Abrufen der Suchergebnisse nicht berücksichtigt. Sie möchten eine Abfrage verwenden, wenn eine Bewertung wichtig ist, die angibt, ob die Suchergebnisse von hoher Relevanz sind
So bestimmen Sie das Ranking der Suchergebnisse Wenn der Suchbegriff in einem Dokument gut übereinstimmt und es sich um einen eindeutigen Suchbegriff für das betreffende Dokument handelt, der in anderen Dokumenten nicht häufig gefunden wird, und wenn es sich um ein kurzes Dokument handelt, ist die Übereinstimmung hoch. https://qiita.com/r4-keisuke/items/d653d26b6fc8b7955c05
https://medium.com/hello-elasticsearch/elasticsearch-c98fd9ce6a18 Auf Filter setzen, um Zeichen zu normalisieren
/usr/local/Cellar/elasticsearch/7.8.1/bin/elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-7.8.1.zip
/usr/local/Cellar/elasticsearch/7.8.1/bin/elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-7.8.1.zip
https://qiita.com/chase0213/items/381b1eeacb849d93ecfd https://qiita.com/yamashun/items/e1f2157e1b3cf3a716e3
Recommended Posts