[PYTHON] Von der Installation von Elasticsearch bis zur Dateneingabe

Vor kurzem habe ich angefangen, Elasticsearch für die Arbeit zu verwenden. Als Memo werde ich schreiben, was ich von der Dateneingabe bis zur Bewertung verwendet und gelernt habe.

Es wird ziemlich lange dauern, alles zu schreiben, also werde ich es vorne und hinten getrennt schreiben. Der erste Teil ist von der Installation bis zur Dateneingabe Der zweite Teil befasst sich mit Suchen und Bewerten.

Installation

Installieren Sie vorerst, was Sie brauchen. Die Entwicklungsumgebung ist 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.

Benötigt Java Version 8 oder höher.

Java-Installation

Installieren Sie zunächst Java 8. Bitte fahren Sie fort, während Sie auf [hier] verweisen (http://zero-config.com/centos/install-java8.html). Wenn Sie bereits eine ältere Version von Java 1.7 haben, erfahren Sie über den obigen Link auch, wie Sie Java-VMs wechseln.

Sie können Java 7 entfernen und Java 8 neu installieren.

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

Versionsbestätigung

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

Installieren Sie Elasticsearch

Sie können ältere Versionen von 2.x mit yum installieren. Da hier Elasticsearch 5.0 verwendet wird, installieren Sie Elasticsearch 5.0. (Es scheint, dass 6 vor kurzem veröffentlicht wurde.) Die Installation sollte den Schritten in Elasticsearch Docs folgen, aber der Start hat nicht funktioniert. (; ∀ ;)

Installation von U / min als Alternative. (Derzeit kann 6 nicht mit U / min installiert werden.)

# 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

Testen Sie, ob es gestartet werden kann

# 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"
}

Sie konnten es starten.

Kibana-Installation

Siehe 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

Stellen Sie die Verbindung her.

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

Öffnen wir es im Browser.

http://192.168.216.128:5601

キャプチャ.PNG

Ich habe es sicher angeschlossen. ((´∀ `))

Installation von Kuromoji

Lassen Sie uns auch das Plugin für die japanische Analyse installieren.

# /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"
        }
      ],
…

Bonus

Es gibt auch eine Cloud-Version von Elastic Cloud (https://cloud.elastic.co/). (Es gibt eine 14-tägige kostenlose Testphase.) Elastic verwendet AWS-Server anstelle seiner eigenen. Die GUI-Bedienung ist mit einem Browser völlig praktisch, aber unpraktisch, wenn Sie sie nicht auf der Rückseite (CUI) des Servers ablegen.

Daten mit Python eingeben

Das erste ist, dass ich Kuromoji verwenden möchte, also werde ich Twitter-Informationen aufnehmen und sie auf Japanisch analysieren. Zweitens möchte ich die Karte von Kibana verwenden, damit ich die Erdbebeninformationen eingeben kann.

1. Analyse von Twitter-Informationen

Ich bin mit dem Sammeln von Twitter nicht sehr vertraut, daher werde ich auf den Inhalt von [hier] verweisen (http://qiita.com/yoppe/items/3e61fd567ae1d4c40a96).

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

Installieren Sie zunächst die erforderlichen Pakete.

# pip install twitter
# pip install elasticsearch

Kartierung

Wie SQL muss auch Elasticsearch die Datenstruktur im Voraus festlegen und dann die Daten eingeben. Elasticsearch hat eine Index-Typ-ID-Struktur. Bei der Eingabe von Daten müssen Index und Typ angegeben werden, die ID muss jedoch nicht angegeben werden. In diesem Fall werden automatisch 22-stellige UUIDs eingegeben.

SQL Mongo Elastic
DB DB index
table collection type

Sie können mit Curl abbilden, aber ich finde es nützlicher mit den Dev Tools von 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" :["Verbindung","Partikel","Partikel-格Partikel","Partikel-格Partikel-Allgemeines","Partikel-格Partikel-Zitat","Partikel-格Partikel-Gemeinsame Sprache","Partikel-接続Partikel","Partikel-係Partikel","Partikel-副Partikel","Partikel-Intermittierender WurfPartikel","Partikel-並立Partikel","Partikel-終Partikel","Partikel-副Partikel/並立Partikel/終Partikel","Partikel-Union","Partikel-Adjunct","Partikel-Besondere","Hilfsverb","Symbol","Symbol-Allgemeines","Symbol-Lesepunkt","Symbol-Phrase","Symbol-Leer","Symbol-Klammern öffnen","Symbol-In Klammern geschlossen","Andere-Intermittierender Wurf","Füllstoff","Nonverbaler Ton"]
          				}
        			}
			}
		}
	},
	"mappings": {
		"twi_type":{
			"properties":{
				"created_at" : {
					"type" : "date"
				},
				"text" : {
					"type" : "text",
					"analyzer": "japanese",
					 "fielddata": true 
				},
				"track": {
					"type": "keyword"
				}
			}
		}
	}
}

Definieren Sie "Analysator" in "Einstellungen". Da für "Text" eine japanische Analyse erforderlich ist, um Twitter-Inhalte zu speichern, geben Sie "Analyzer" an. Wir möchten track nicht analysieren, daher gibt type keyword an.

Informationen zur Einstellungsmethode von Kuromoji finden Sie unter hier. Hier verwenden wir den Filter kuromoji_part_of_speech, um bestimmte Teile (Hilfsmittel, Fallassistenten, Symbole) auszuschließen.

Dateneingabe

Fast das gesamte [Yoppe-Skript](http://qiita.com/yoppe/items/3e61fd567ae1d4c40a96#%E3%83%84%E3%82%A4%E3%83%BC%E3%83%88%E3 Verwenden Sie% 81% AE% E5% 8F% 8E% E9% 9B% 86). Ich habe das leicht modifizierte Skript auf [Github] gestellt (https://github.com/onlyzs89/elasticseach/blob/master/treand_stream.py).

Ergebnis

Lassen Sie uns nach einer Weile die Daten in Kinaba überprüfen. Importieren Sie die Daten in Kibana. aaa.png

Wählen Sie Discover --track. Visualize - pie chart - twi_index

bbb.png

An diesem Tag (16.11.11) wurde "Red Pig" im Fernsehen ausgestrahlt, so dass es ein heißes Thema auf Twitter wurde. (´∀ `)

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 wird verwendet, wenn eine Analyse erforderlich ist, und keywors wird verwendet, wenn bei der Suche eine genaue Übereinstimmung erforderlich ist.

Schließlich habe ich Kuromoji verwendet, also lasst uns den Effekt überprüfen.

Ohne Kuromoji zu benutzen: eee.png

Verwenden Sie kuromoji: ccc.png

Es ist subtil, aber etwas besser. Nun, es gibt viele spezielle Nomenklaturen in den Informationen, die auf Twitter veröffentlicht werden. Daher ist es schwierig zu analysieren, ohne ein Benutzerwörterbuch zu definieren.

2. Erdbebeninformationen

Die verwendete Informationsquelle ist JSON-API, bereitgestellt von P2P Earthquake Information.

Kartierung

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

Dateneingabe

Ich habe das Skript in [Github] eingefügt (https://github.com/onlyzs89/elasticseach/blob/master/import_earthquake.py). Eigentlich ist es der Code, den ich vor einem halben Jahr geschrieben habe. Sie können es tun, aber es gibt einige seltsame Dinge. Wenn ich Zeit habe, werde ich es reparieren.

Ergebnis

Fragen Sie bei Kibana nach.

ddd.png

Dies ist das Ende des ersten Teils. Ich denke darüber nach, welche Art von Daten für die Suche und Bewertung des zweiten Teils analysiert werden sollten.

Recommended Posts

Von der Installation von Elasticsearch bis zur Dateneingabe
OpenMPI-Installation Vom Download bis zum Bestehen
SIGNATE Quest ① Vom Lesen der Daten bis zur Vorverarbeitung
[Hinweis] [PyTorch] Von der Installation bis zur einfachen Verwendung
Flask Tutorial (von der Installation bis zur Hallo Welt)
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
Summe von 1 bis 10
[Ansible Installationsverfahren] Von der Installation bis zur Ausführung des Playbooks
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Datenvorverarbeitung (2) Ändern Sie die Daten von "Kategorisch" in "Numerisch".
Abrufen von Daten von MacNote3 und Migrieren zu Write
[Python] Fluss vom Web-Scraping zur Datenanalyse
Von der Installation von ROS für Windows bis zur Funktionsprüfung
[AWS] Migrieren Sie Daten von DynamoDB nach Aurora MySQL
Daten aus S3 extrahieren
So kratzen Sie Bilddaten von Flickr mit Python
Änderungen von Python 3.0 zu Python 3.5
Automatische Datenmigration vom Yahoo Root Lab nach Strava
Änderungen von Python 2 zu Python 3.0
Übergang von WSL1 zu WSL2
Senden Sie Protokolldaten vom Server an Splunk Cloud
RaspberryPi3 (STRETCH) Setup von der Betriebssysteminstallation bis Hello World
Senden Sie Daten von Python über die Socket-Kommunikation an Processing
Aufbau der Python-Entwicklungsumgebung 2020 [Von der Python-Installation bis zur Einführung in die Poesie]
DataNitro, Implementierung einer Funktion zum Lesen von Daten aus dem Blatt
Von der Bearbeitung bis zur Ausführung
Geben Sie Zaim-Daten mit Logstash in den Amazon Elasticsearch Service ein
[CentOS 7.7] Von der Installation der Desktop-Umgebung bis zur Remotedesktopverbindung möglich (ab Mindestinstallation)
SIGNATE Quest ② Von der gezielten Modellerstellung bis zur Erstellung von Übermittlungsdaten
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
Erklärung von der Installation von Sphinx bis zur Verwendung eines externen Themas (Bootswatch)
[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬
Rabbit MQ Tutorial (1) - Von der Installation zu Hello World (offizielle Site-Übersetzung)
Die Geschichte des Kopierens von Daten von S3 auf Googles TeamDrive
Drücken Sie in Python auf REST, um Daten von New Relic abzurufen
Meteorologie x Python ~ Von der Wetterdatenerfassung bis zur Spektrumanalyse ~
Senden Sie eine Anfrage von AWS Lambda an Amazon Elasticsearch Service
Übergeben Sie die OpenCV-Daten der ursprünglichen C ++ - Bibliothek an Python
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Strukturdaten von CHEMBLID abrufen
Post von Python nach Slack
Flirte von PHP nach Python
Exportieren Sie 3D-Daten aus QGIS
Portierung von Argparse zu Hydra
Übergang von Chainer v1 zu Chainer v2
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Von Flask-RESTPlus nach Flask-RESTX migriert
Grundeinstellungen aus der Kubuntu-Installation
Aktualisieren Sie python-social-auth von 0.1.x auf 0.2.x.
Migrieren Sie von require.txt zu pipenv
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Umgang mit Datenrahmen
Portiert von der R-Sprache von "Sazae-sans Janken Data Analysis" nach Python
So vermeiden Sie doppelte Daten bei der Eingabe von Python in SQLite.
Einführung in die Datenanalyse mit Python P17-P26 [ch02 1.usa.gov Daten von bit.ly]
[Spark Data Frame] Ändern Sie eine Spalte von horizontal in vertikal (Scala).
Von der Ubuntu-Installation bis zum Ausführen von Kinect mit Docker und Ros (Übersicht)
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen