[PYTHON] De l'installation d'Elasticsearch à la saisie des données

Récemment, j'ai commencé à utiliser Elasticsearch pour mon travail. Comme mémo, j'écrirai ce que j'ai utilisé et appris de la saisie des données à la notation.

Il faudra beaucoup de temps pour tout écrire, je vais donc l'écrire en deux parties. La première partie va de l'installation à la saisie des données La deuxième partie concerne la recherche et la notation.

Installation

Pour le moment, installez ce dont vous avez besoin. L'environnement de développement est CentOS 7.

Elasticsearch requires at least Java 8. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_73.

Nécessite Java version 8 ou supérieure.

Installation de Java

Tout d'abord, installez Java 8. Continuez en vous référant à here. Si vous disposez déjà d'une ancienne version de Java 1.7, le lien ci-dessus vous indiquera également comment changer de machine virtuelle Java.

Vous pouvez supprimer Java 7 et réinstaller Java 8.

$ sudo yum remove -y java-1.7.0-openjdk
$ sudo yum install -y java-1.8.0-openjdk-devel
$ sudo yum install -y java-1.8.0-openjdk-debuginfo --enablerepo=*debug*

Confirmation de version

$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

Installez Elasticsearch

Vous pouvez installer les anciennes versions de 2.x avec yum. Étant donné qu'Elasticsearch 5.0 est utilisé ici, installez Elasticsearch 5.0. (Il semble que 6 soit sorti récemment.) L'installation doit suivre les étapes de Elasticsearch Docs, mais le démarrage n'a pas fonctionné. (; ∀ ;)

Installez à partir de rpm comme Alternative. (Actuellement, 6 ne peut pas être installé à rpm.)

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# yum install elasticsearch
# systemctl enable elasticsearch
# systemctl start elasticsearch

Tester s'il peut être démarré

# curl localhost:9200
{
  "name" : "3Y-W_H1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "cYenb8Q8S22EHcxJPL7k2Q",
  "version" : {
    "number" : "5.0.0",
    "build_hash" : "253032b",
    "build_date" : "2016-10-26T04:37:51.531Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.0"
  },
  "tagline" : "You Know, for Search"
}

Vous avez pu le démarrer.

installation de kibana

Reportez-vous à Elastic Doc.

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# vim /etc/yum.repos.d/kibana.repo
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# yum install kibana
# systemctl enable kibana
# systemctl start kibana

Configurez la connexion.

# vim /etc/kibana/kibana.yml
network.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
# systemctl restart kibana

Ouvrons-le dans le navigateur.

http://192.168.216.128:5601

キャプチャ.PNG

Je l'ai connecté en toute sécurité. ((´∀ `))

Installation de Kuromoji

Installons également le plugin pour l'analyse japonaise.

# /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
# systemctl restart elasticsearch
# curl -X GET 'http://localhost:9200/_nodes/plugins?pretty'
…
"plugins" : [
        {
          "name" : "analysis-kuromoji",
          "version" : "5.0.0",
          "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
          "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin"
        }
      ],
…

prime

Il existe également une version cloud d'Elastic Cloud (https://cloud.elastic.co/). (Il existe une période d'essai gratuite de 14 jours.) Elastic utilise des serveurs AWS au lieu des siens. Le fonctionnement de l'interface graphique est tout à fait pratique avec un navigateur, mais il n'est pas pratique si vous ne le placez pas à l'arrière (CUI) du serveur.

Données d'entrée à l'aide de Python

La première est que je veux utiliser kuromoji, donc je vais prendre les informations Twitter et les analyser en japonais. Deuxièmement, je voudrais utiliser la carte de kibana, donc je vais entrer les informations sur le tremblement de terre.

1. Analyse des informations Twitter

Je ne suis pas très familier avec la collecte de Twitter, donc je vais continuer en me référant au contenu de ici.

# python -V
Python 3.5.2 :: Anaconda 4.1.1 (64-bit)

Tout d'abord, installez les packages requis.

# pip install twitter
# pip install elasticsearch

cartographie

Comme SQL, Elasticsearch doit également décider de la structure des données à l'avance, puis saisir les données. Elasticsearch a une structure d'index-type-id. Lors de la saisie de données, l'index et le type doivent être spécifiés, mais id ne doit pas être spécifié. Dans ce cas, les UUID à 22 chiffres seront saisis automatiquement.

SQL Mongo Elastic
DB DB index
table collection type

Vous pouvez mapper en utilisant curl, mais je trouve cela plus utile avec les outils de développement de kibana.

PUT /twi_index
{
	"settings":{
		"index":{
			"analysis":{
			 	"tokenizer" : {
          				"kuromoji" : {
           					"type" : "kuromoji_tokenizer",
          					"mode" : "search"
          				}
         			},
				"analyzer" : {
          				"japanese" : {
            					"type": "custom",
            					"tokenizer" : "kuromoji",
            					"filter" : ["pos_filter"]
          				}
        			},
        			"filter" : {
          				"pos_filter" : {
            					"type" : "kuromoji_part_of_speech",
            					"stoptags" :["conjonction","Particule","Particule-格Particule","Particule-格Particule-Général","Particule-格Particule-Citation","Particule-格Particule-Langage commun","Particule-接続Particule","Particule-係Particule","Particule-副Particule","Particule-Lancer intermittentParticule","Particule-並立Particule","Particule-終Particule","Particule-副Particule/並立Particule/終Particule","Particule-syndicat","Particule-Auxiliaire","Particule-Spécial","Verbe auxiliaire","symbole","symbole-Général","symbole-Point de lecture","symbole-Phrase","symbole-Vide","symbole-Ouvrir les parenthèses","symbole-Fermé entre parenthèses","Autre-Lancer intermittent","Remplisseur","Son non verbal"]
          				}
        			}
			}
		}
	},
	"mappings": {
		"twi_type":{
			"properties":{
				"created_at" : {
					"type" : "date"
				},
				"text" : {
					"type" : "text",
					"analyzer": "japanese",
					 "fielddata": true 
				},
				"track": {
					"type": "keyword"
				}
			}
		}
	}
}

Définissez «analyseur» dans «paramètres». Puisque l'analyse japonaise est requise pour que text puisse enregistrer le contenu Twitter, spécifiez ʻanalyzer. Nous ne voulons pas analyser track, donc le type spécifie keyword`.

Pour la méthode de paramétrage de kuromoji, reportez-vous à here. Ici, nous utilisons le filtre kuromoji_part_of_speech pour exclure certaines parties (auxiliaires, assistants de cas, symboles).

Entrée de données

Presque tout [script de yoppe](http://qiita.com/yoppe/items/3e61fd567ae1d4c40a96#%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3 Utilisez% 81% AE% E5% 8F% 8E% E9% 9B% 86). J'ai mis le script légèrement modifié sur Github.

résultat

Vérifions les données sur Kinaba après un certain temps. Importez les données dans kibana. aaa.png

Sélectionnez Discover --track. Visualize - pie chart - twi_index

bbb.png

Ce jour-là (16/11/11), "Red Pig" a été diffusé à la télévision, il est donc devenu un sujet brûlant sur Twitter. (´∀ `)

Keyword fields are only searchable by their exact value. If you need to index structured content such as email addresses, hostnames, status codes, or tags, it is likely that you should rather use a keyword field.

-Text est utilisé lorsqu'une analyse est requise, et keywors est utilisé lorsqu'une correspondance exacte est requise lors de la recherche.

Enfin, j'ai utilisé kuromoji, alors vérifions l'effet.

Sans utiliser kuromoji: eee.png

Utilisez kuromoji: ccc.png

C'est subtil, mais c'est un peu mieux. Eh bien, il existe de nombreuses nomenclatures dédiées dans les informations envoyées sur Twitter, il est donc difficile de les analyser sans définir un dictionnaire utilisateur.

2. Informations sur les tremblements de terre

La source d'information utilisée est API JSON fournie par P2P Earthquake Information.

cartographie

PUT /earthquakes
{
    "mappings": {
        "earthquake": {
            "properties": {
                "time": {
                    "type": "date",
                    "format":"yyyy/MM/dd HH:mm:ssZ"
                },
                "place": {
                    "type": "text" 
                },
                "location": {
                    "type": "geo_point"
                },
                "magnitude": {
                    "type": "float"
                },
                "depth": {
                    "type": "float"
                }
            }
        }
    }
}

Entrée de données

J'ai mis le script dans Github. En fait, c'est le code que j'ai écrit il y a six mois. Vous pouvez le faire, mais il y a des choses étranges. Si j'ai le temps, je vais le réparer.

résultat

Vérifiez auprès de Kibana.

ddd.png

C'est la fin de la première partie. Je réfléchis au type de données à analyser pour la recherche et la notation de la deuxième partie.

Recommended Posts

De l'installation d'Elasticsearch à la saisie des données
Installation d'OpenMPI Du téléchargement au passage
SIGNATURE Quête ① De la lecture des données au prétraitement
[Note] [PyTorch] De l'installation à la simplicité d'utilisation
Tutoriel Flask (de l'installation à Hello World)
Introduction à Scapy ① (De l'installation à l'exécution de Scapy)
Somme de 1 à 10
[Procédure d'installation Ansible] De l'installation à l'exécution du playbook
[Kaggle] De la lecture des données au prétraitement et au codage
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Prétraitement des données (2) Changez les données de catégorielles à numériques.
Récupération des données de MacNote3 et migration vers Write
[Python] Flux du scraping Web à l'analyse des données
De l'installation de ROS pour Windows au contrôle de fonctionnement
[AWS] Migrer les données de DynamoDB vers Aurora MySQL
Extraction de données depuis S3
Comment récupérer des données d'image de Flickr avec Python
Changements de Python 3.0 à Python 3.5
Migration automatique des données de Yahoo Root Lab vers Strava
Changements de Python 2 à Python 3.0
Transition de WSL1 à WSL2
Envoyer les données du journal du serveur vers Splunk Cloud
Configuration de RaspberryPi3 (STRETCH) depuis l'installation du système d'exploitation vers Hello World
Envoyer des données de Python au traitement via une communication socket
Construction de l'environnement de développement Python 2020 [De l'installation de Python à l'introduction à la poésie]
DataNitro, implémentation de la fonction de lecture des données de feuille
De l'édition à l'exécution
Entrez les données Zaim dans Amazon Elasticsearch Service avec Logstash
[CentOS 7.7] De l'installation de l'environnement de bureau à la connexion au bureau à distance possible (à partir de l'installation minimale)
SIGNATURE Quête ② De la création du modèle de ciblage à la création des données soumises
[Linux] Copie des données de Linux vers Windows avec un script shell
Explication de l'installation de Sphinx à l'utilisation d'un thème externe (Bootswatch)
[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬
Tutoriel Rabbit MQ (1) - De l'installation à Hello World (traduction du site officiel)
L'histoire de la copie de données de S3 vers TeamDrive de Google
Appuyez sur REST en Python pour obtenir des données de New Relic
Météorologie x Python ~ De l'acquisition de données météorologiques à l'analyse spectrale ~
Envoyer une demande d'AWS Lambda à Amazon Elasticsearch Service
Transmettez les données OpenCV de la bibliothèque C ++ d'origine à Python
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
Obtenir les données structurelles de CHEMBLID
Publier de Python vers Slack
Flirter de PHP à Python
Exporter des données 3D depuis QGIS
Portage d'Argparse à Hydra
Transition de Chainer v1 à Chainer v2
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Migré de Flask-RESTPlus vers Flask-RESTX
Paramètres initiaux de l'installation de Kubuntu
Mettre à jour python-social-auth de 0.1.x à 0.2.x
Migrer de requirements.txt vers pipenv
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Comment gérer les trames de données
Porté du langage R de "Sazae-san's Janken Data Analysis" vers Python
Comment éviter la duplication des données lors de la saisie de Python vers SQLite.
Introduction à l'analyse de données par Python P17-P26 [ch02 1.usa.gov données de bit.ly]
[Spark Data Frame] Changer une colonne de l'horizontale à la verticale (Scala)
De l'installation ubuntu à l'exécution de kinect avec docker et ros (présentation)
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc Préparation 1