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.
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.
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)
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.
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
Ich habe es sicher angeschlossen. ((´∀ `))
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"
}
],
…
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.
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.
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
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.
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).
Lassen Sie uns nach einer Weile die Daten in Kinaba überprüfen. Importieren Sie die Daten in Kibana.
Wählen Sie Discover --track. Visualize - pie chart - twi_index
An diesem Tag (16.11.11) wurde "Red Pig" im Fernsehen ausgestrahlt, so dass es ein heißes Thema auf Twitter wurde. (´∀ `)
GET _aliases
überprüfen.
・ Über Felddatentyp
-In 2.x verwendet der Text den Typ "Zeichenfolge", ab 5.x jedoch "Text" und "Schlüsselwort".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:
Verwenden Sie kuromoji:
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.
Die verwendete Informationsquelle ist JSON-API, bereitgestellt von 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"
}
}
}
}
}
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.
Fragen Sie bei Kibana nach.
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