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.
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.
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)
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.
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
Je l'ai connecté en toute sécurité. ((´∀ `))
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"
}
],
…
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.
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.
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
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).
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.
Vérifions les données sur Kinaba après un certain temps. Importez les données dans kibana.
Sélectionnez Discover --track. Visualize - pie chart - twi_index
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. (´∀ `)
GET _aliases
.
・ À propos de Type de données de champ
-Dans 2.x, le texte utilise le type string
, mais à partir de 5.x il s'agit de texte
et de mot-clé
.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:
Utilisez kuromoji:
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.
La source d'information utilisée est API JSON fournie par P2P Earthquake Information.
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"
}
}
}
}
}
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.
Vérifiez auprès de Kibana.
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