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
--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 d'ES par rapport à RDB (Référence)
Cluster > Node > Index( = DB) > Type(=Table) >Document( =Row)
#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
et opérer via Model. --Le nom de l'index est défini sur ʻindex_name "articles- # {Rails.env}"
de sorte qu'il change en fonction de l'environnement.#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
-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"
}
}
}'
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.
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
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
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
https://medium.com/hello-elasticsearch/elasticsearch-c98fd9ce6a18 Définir pour filtrer pour normaliser les caractères
/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