Rails + ElasticSearch Survey Memo

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

Plugin hinzufügen

--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

Datenstruktur

Struktur von ES im Vergleich zu RDB (Referenz)

Cluster > Node > Index( = DB) > Type(=Table) >Document( =Row)

Grundlegende Verwendung

#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

Referenzlink

Verwenden Sie Elastic Search from Rails

#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

Referenz

ElasticSearch Japanische Plug-In-Geschichte

-Ü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"
    }
  }
}'

Über die Volltextsuche in erster Linie

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.

Informationen zur Volltextsuche Referenzlink

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

Termbasierte Abfrage (genaue Übereinstimmung)

https://blog.chocolapod.net/momokan/entry/114

Unterschied zwischen Filter und Abfrage

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

Was ist eine Punktzahl?

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

Was der Intensivfilter macht

https://medium.com/hello-elasticsearch/elasticsearch-c98fd9ce6a18 Auf Filter setzen, um Zeichen zu normalisieren

Installation des japanischen Plug-Ins

Kuromoji-Installation

/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

Installation auf der Intensivstation

/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

Referenz in Schienen setzen

https://qiita.com/chase0213/items/381b1eeacb849d93ecfd https://qiita.com/yamashun/items/e1f2157e1b3cf3a716e3

Recommended Posts

Rails + ElasticSearch Survey Memo
Schienenbehörde / Rollenerhebung
[Divise] Rails Memo Grundeinstellungen Grundeinstellungen
Integrieren Sie Elasticsearch in Ihre Rails-App
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
[Rails] Memo zur Implementierung der Kommentarfunktion
Rails Tutorial (4. Ausgabe) Memo Kapitel 6
Ruby on Rails6 Praktischer Leitfaden cp13 ~ cp15 [Memo]
Ruby on Rails6 Praktischer Leitfaden cp7 ~ cp9 [Memo]
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
Ruby on Rails6 Praktischer Leitfaden cp4 ~ cp6 [Memo]
Ruby on Rails6 Praktischer Leitfaden cp10 ~ cp12 [Memo]
Ruby on Rails6 Praktischer Leitfaden cp16 ~ cp18 [Memo]