Rails + Mémo d'enquête ElasticSearch

ElasticSearch

Nécessite java8 ou supérieur (Download)

#Installation ES
$ brew install elasticsearch

#Démarrez ES
$ /usr/local/Cellar/elasticsearch/7.8.1/bin/elasticsearch
or
$ elasticsearch

#Contrôle de fonctionnement
$ curl http://localhost:9200

Ajouter un plugin

--kuromoji (écriture séparée) --ICU (filtre de normalisation des caractères)

$ 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

Structure de données

Structure d'ES par rapport à RDB (Référence)

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

Utilisation de base

#liste d'index
curl -X GET http://localhost:9200/_cat/indices

#création d'index
curl -XPUT http://localhost:9200/Nom de l'index

#Supprimer l'index
curl -XDELETE localhost:9200/Nom de l'index

#Ajouter un document
curl -XPOST http://localhost:9200/Nom de l'index/Nom du type/ -d '{
    "field_01": "hoge1",
}'


#Obtenez doc
curl -XGET http://localhost:9200/new_index/_search

curl -H "Content-Type: application/json" -XGET localhost:9200/Nom de l'index/_search\?pretty  -d '{"size":100}'

    ※?Formater le résultat avec joli et sortie
    ※ -d '{"size":100}'Si vous ne spécifiez pas le nombre de cas dans, il n'y a qu'un maximum de 10 cas.
* Lors de l'envoi de json, "-H "Content-Type: application/json""Est nécessaire


#recherche doc
curl -H "Content-Type: application/json" -XGET localhost:9200/Nom de l'index/_search\?pretty  -d'
{
  "query": {
    "match": {
nom de l'article:Valeur de recherche
    }
  }
}'


#Ajouter un document
curl -H "Content-Type: application/json" -XPOST http://localhost:9200/Nom de l'index/new/ -d'{
nom de l'article:valeur
}'

Kibana Puisqu'il a une fonction de type générateur de requête, ajoutez-la si nécessaire pour le développement

# install
$ brew install kibana
$ brew info kibana

#Commencez
$ kibana

#Accéder au tableau de bord
http://localhost:5601/app/kibana#/dev_tools/console

Lien de référence

Utiliser la recherche élastique à partir de rails

#création d'index
<Nom du modèle>.create_index

#Réimporter toutes les données DB
<Nom du modèle>__elasticsearch__.import

#Exemple de recherche de données
<Nom du modèle>.search query:{ match_all: {}}
<Nom du modèle>.search query:{ match: {title:”hello”}}

Exécuter sidekiq async pendant le traitement du changement de modèle (ʻArticleIndexer.perform_async) → Cued par Redis et créer de manière asynchrone l'index ElasticSearch (models / concerts / article_searchable`)


sidekiq

Requis pour les mises à jour d'index asynchrones. Repéré par Redis et indexé de manière asynchrone par Elastic Search.

$ brew install redis 

$ gem 'sidekiq'

$ bundle exec sidekiq -C config/sidekiq.yml

Référence

Histoire du plug-in japonais ElasticSearch

-Vérifiez le réglage de l'index (si vous spécifiez un analyseur, vous pouvez le vérifier.)

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

-Vérifier comment la requête est divisée par es (écriture séparée == tokenize)

curl -H "Content-Type: application/json" -XGET localhost:9200/articles-test/_search\?pretty  -d'
{
  "query": {
    "match": {
      "title": "Tokyo"
    }
  }
}'

À propos de la recherche en texte intégral en premier lieu

Fondamentalement, ce n'est pas une correspondance exacte. Dans le cas d'une recherche en texte intégral comme l'anglais, les mots sont séparés par des espaces et chaque mot est divisé pour créer un index. Puisque les mots correspondent aux mots divisés, il n'est pas toujours possible de rechercher par correspondance exacte.

kuromoji et ngram sont les paramètres de cette division. Le taux de correspondance est plus élevé pour ngram.

Ce que fait icu est bon pour les kana demi-largeur et les indexer en tant que caractères ordinaires. C'est comme un filtre qui convertit bien les caractères japonais UTF-8.

À propos du lien de référence pour la recherche en texte intégral

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

Requête basée sur les termes (correspondance exacte)

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

Différence entre filtre et requête

query (recherche en texte intégral) ne prend pas en compte le score lors de la récupération des résultats de recherche. Envie d'utiliser une requête lorsque le score qui montre si les résultats de la recherche sont très pertinents est important

Qu'est-ce qu'un score?

Comment déterminer le classement des résultats de recherche Si le terme de recherche correspond bien dans un document, et qu'il s'agit d'un terme de recherche unique pour le document pertinent qui n'est pas souvent trouvé dans d'autres documents, et s'il s'agit d'un document court, la correspondance est élevée. https://qiita.com/r4-keisuke/items/d653d26b6fc8b7955c05

Ce que fait le filtre ICU

https://medium.com/hello-elasticsearch/elasticsearch-c98fd9ce6a18 Définir pour filtrer pour normaliser les caractères

Installation du plug-in japonais

Installation de Kuromoji

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

/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

Définition de la référence dans les rails

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

Recommended Posts

Rails + Mémo d'enquête ElasticSearch
Enquête sur l'autorité / le rôle de Rails
[Diviser] rails memo Paramètres de base Paramètres initiaux
Intégrez Elasticsearch dans votre application Rails
Mémo de construction de l'environnement Ruby on Rails 6.0
[Rails] Commentaire mémo de procédure d'implémentation
Tutoriel Rails (4e édition) Mémo Chapitre 6
Ruby on Rails6 Guide pratique cp13 ~ cp15 [Mémo]
Ruby on Rails6 Guide pratique cp7 ~ cp9 [Mémo]
[Rails] [Note] Quand ajouter = à <%%> et quand pas
Ruby on Rails6 Guide pratique cp4 ~ cp6 [Mémo]
Ruby on Rails6 Guide pratique cp10 ~ cp12 [Memo]
Ruby on Rails6 Guide pratique cp16 ~ cp18 [Mémo]