"Première recherche élastique" commençant par un client python

Aperçu

Ceci est un mémo qui résume les essais depuis l'installation d'elasticsearch jusqu'à une longue période avant l'opération. Le client utilise le client python. Avec cela, vous pouvez ajouter et rechercher des données à l'aide de python, il sera donc plus facile de traiter les données.

Cadre environnemental

Installez Elasticsearch

Puisque l'environnement était Debian, apportez le paquet deb et installez-le.

% wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.1.deb
% sudo dpkg -i elasticsearch-1.3.1.deb

Ajoutez l'emplacement de JAVA_HOME dans votre environnement au répertoire où vous allez pour trouver java dans /etc/init.d/elasticsearch (ajouté / usr / loca / java).

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT)
JDK_DIRS="/usr/local/java /usr/lib/jvm/java-7-oracle /usr/lib/jvm/java-7-openjdk /usr/lib/jvm/java-7-openjdk-amd64/ /usr/lib/jvm/java-7-openjdk-armhf /usr/lib/jvm/java-7-openjdk-i386/ /usr/lib/jvm/default-java"

Commencez

Commencez


% sudo /etc/init.d/elasticsearch start

Vérification

Essayez d'accéder à http: // localhost: 9200 et confirmez que ce qui suit est renvoyé. Accédez à l'adresse depuis un navigateur pour la vérifier, ou accédez-y à partir de la ligne de commande comme indiqué ci-dessous.

% curl -XGET http://localhost:9200/                                                       

réponse


{
  "status" : 200,
  "name" : "White Rabbit",
  "version" : {
    "number" : "1.3.1",
    "build_hash" : "2de6dc5268c32fb49b205233c138d93aaf772015",
    "build_timestamp" : "2014-07-28T14:45:15Z",
    "build_snapshot" : false,
    "lucene_version" : "4.9"
  },
  "tagline" : "You Know, for Search"
}

Essayez d'utiliser le plugin

Installation du plugin

Puisqu'il n'est pas pratique s'il n'y a rien, le standard elasticsearch-head est inclus. C'est suffisant pour le minimum. Pour installer, appuyez simplement sur la commande plugin fournie avec elasticsearch. Agréable!

Si vous pouvez accéder à http: // localhost: 9200 / _plugin / head, vous réussissez.

Installation


% /usr/share/elasticsearch/bin/plugin -install mobz/elasticsearch-head

L'écran ressemble à ceci. elasticsearch-head.png

Utiliser le client python

Officiel: elasticsearch-py Documentation: Python Elasticsearch Client

Préparez l'environnement python

J'ai python 2.6.6 sur mon ordinateur. Comme je n'ai jamais utilisé python, j'ai décidé de mettre un pip pour la gestion des paquets et un virtualenv pour changer d'environnement en me référant à la page googlé.

Référence: L'installation de Pip est devenue plus facile avant que je le sache

Cité de "Sans le savoir, il est devenu plus facile d'installer pip"


curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
pip install virtualenv virtualenvwrapper
vi ~/.bashrc
#Ajoutez les 3 lignes suivantes
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/work
source /path/to/your/virtualenvwrapper.sh

Installez le client python et lancez-le de manière interactive

Installation

Installation


pip install elasticsearch

Commencez

Commencez


% LANG=ja_JP.UTF8 python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from elasticsearch import Elasticsearch
>>> es = Elasticsearch("localhost:9200")
>>> es
<Elasticsearch([{'host': 'localhost', 'port': 9200}])>

Ajouter un document à l'index

API:elasticsearch.Elasticsearch.index

Ajoutez les données suivantes. index et doc_type sont des éléments obligatoires. Si l'index spécifié n'existe pas, un nouvel index sera créé. Si vous ne spécifiez pas l'identifiant, il sera numéroté de manière appropriée.

ajouter à


>>> es.index(index="fruit", doc_type="test", id=1, body={"name":"apple", "color":"red"})
{u'_type': u'test', u'_id': u'1', u'created': True, u'_version': 1, u'_index': u'fruit'}

Comment l'index a été créé elasticsearch-head-new-index.png

Documentation ajoutée elasticsearch-new-index.png

Essayez diverses opérations

Modifier / Ajouter

Écraser si le même identifiant est spécifié.

Écraser


>>> es.index(index="fruit", doc_type="test", id=1, body={"name":"apple", "color":"green"})
{u'_type': u'test', u'_id': u'1', u'created': False, u'_version': 2, u'_index': u'fruit'}

Si id n'est pas spécifié, les numéros seront attribués de manière appropriée. Dans ce qui suit, id = dnMiX8ufSiiZC_c8KwykuQ.

Si l'ID n'est pas spécifié


>>> es.index(index="fruit", doc_type="test", body={"name":"pomme", "color":"red"})
{u'_type': u'test', u'_id': u'dnMiX8ufSiiZC_c8KwykuQ', u'created': True, u'_version': 1, u'_index': u'fruit'}

Obtenez des données

supposition

Les données suivantes sont définies dans l'index appelé fruit. Le type de document est défini sur test.

id name color
9qsreGQTTMSIsMzlEe0H0A pomme red
3MH8LiCNSkOgZMwx_kNebw apple red
YXAo8TfrQbeF3JQpW6dakw banana yellow
mz1wlxRUSSWvCuIIh6k4OQ orange orange
MBEGluC5S-OzNdGoDYavGg apple green

Quand l'identifiant peut être spécifié

Spécifié par id, la valeur de retour est apple,Attendez-vous à du vert


>>> res = es.get(index="fruit", doc_type="_all", id="MBEGluC5S-OzNdGoDYavGg")
>>> print json.dumps(res, indent=4)
{
    "_type": "test",
    "_source": {
        "color": "green",
        "name": "apple"
    },
    "_index": "fruit",
    "_version": 1,
    "found": true,
    "_id": "MBEGluC5S-OzNdGoDYavGg"
}

Lorsque vous souhaitez spécifier dans une requête

Apportez-les tous

>>> res = es.search(index="fruit", body={"query": {"match_all": {}}})
>>> print json.dumps(res, indent=4)
{
    "hits": {
        "hits": [
            {
                "_score": 1.0,
                "_type": "test",
                "_id": "3MH8LiCNSkOgZMwx_kNebw",
                "_source": {
                    "color": "red",
                    "name": "apple"
                },
                "_index": "fruit"
            },
            {
                "_score": 1.0,
                "_type": "test",
                "_id": "mz1wlxRUSSWvCuIIh6k4OQ",
                "_source": {
                    "color": "orange",
                    "name": "orange"
                },
                "_index": "fruit"
            },
            {
                "_score": 1.0,
                "_type": "test",
                "_id": "9qsreGQTTMSIsMzlEe0H0A",
                "_source": {
                    "color": "red",
                    "name": "\u308a\u3093\u3054"
                },
                "_index": "fruit"
            },
            {
                "_score": 1.0,
                "_type": "test",
                "_id": "MBEGluC5S-OzNdGoDYavGg",
                "_source": {
                    "color": "green",
                    "name": "apple"
                },
                "_index": "fruit"
            },
            {
                "_score": 1.0,
                "_type": "test",
                "_id": "YXAo8TfrQbeF3JQpW6dakw",
                "_source": {
                    "color": "yellow",
                    "name": "banana"
                },
                "_index": "fruit"
            }
        ],
        "total": 5,
        "max_score": 1.0
    },
    "_shards": {
        "successful": 5,
        "failed": 0,
        "total": 5
    },
    "took": 3,
    "timed_out": false
}

Recherche avec conditions

Essayez d'en rechercher un avec couleur = rouge.

>>> res = es.search(index="fruit", body={"query": {"match": {"color":"red"}}})
>>> print json.dumps(res, indent=2 , ensure_ascii=False)
{
  "hits": {
    "hits": [
      {
        "_score": 0.30685282000000003,
        "_type": "test",
        "_id": "3MH8LiCNSkOgZMwx_kNebw",
        "_source": {
          "color": "red",
          "name": "apple"
        },
        "_index": "fruit"
      },
      {
        "_score": 0.30685282000000003,
        "_type": "test",
        "_id": "9qsreGQTTMSIsMzlEe0H0A",
        "_source": {
          "color": "red",
          "name": "pomme"
        },
        "_index": "fruit"
      }
    ],
    "total": 2,
    "max_score": 0.30685282000000003
  },
  "_shards": {
    "successful": 5,
    "failed": 0,
    "total": 5
  },
  "took": 2,
  "timed_out": false
}

Supprimer l'index

L'indice du fruit disparaît proprement.

>>> es.indices.delete(index="fruit")
{u'acknowledged': True}

Recommended Posts

"Première recherche élastique" commençant par un client python
Python à partir de Windows 7
GRPC commençant par Python
Apprentissage amélioré à partir de Python
Première simulation de cellule nerveuse avec NEURON + Python
Faites une loterie avec Python
Créer un répertoire avec python
Python commençant par Hello world!
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
[Python] Qu'est-ce qu'une instruction with?
Résoudre ABC163 A ~ C avec Python
Manuel de graphisme Python avec Matplotlib.
Faisons une interface graphique avec python.
Web scraping avec Python Première étape
Créez un environnement virtuel avec Python!
J'ai fait une loterie avec Python.
[GUI avec Python] PyQt5-La première étape-
Créer un environnement virtuel avec Python 3
Résoudre ABC168 A ~ C avec Python
Créer un système de recommandation avec python
[Python] Générer un mot de passe avec Slackbot
Résoudre ABC162 A ~ C avec Python
Résoudre ABC167 A ~ C avec Python
Résoudre ABC158 A ~ C avec Python
Faisons un graphe avec python! !!
Analyse de données à partir de python (visualisation de données 1)
[Python] Hériter d'une classe avec des variables de classe
J'ai créé un démon avec Python
Analyse de données à partir de python (visualisation de données 2)
Ecrire un script batch avec Python3.5 ~
Je souhaite rechercher le texte intégral avec elasticsearch + python
[Pyenv] Construire un environnement python avec ubuntu 16.04
Commerce système à partir de Python3: investissement à long terme
Générer une collection de première classe en Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Créer un décorateur de fonction Python avec Class
Créer un fichier power simple avec Python
Un client HTTP simple implémenté en Python
Installer Python en tant que Framework avec pyenv
Client API Slack simple réalisé avec Python
Créez une image factice avec Python + PIL.
J'ai fait un compteur de caractères avec Python
[Python] Dessiner un motif de tourbillon avec une tortue
"Commerce du système à partir de Python3" lecture du mémo
J'ai dessiné une carte thermique avec Seaborn [Python]
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Création d'un environnement Python 3.6 avec Windows + PowerShell
Carte des informations de location sur une carte avec python
Rechercher le labyrinthe avec l'algorithme python A *
Efficacité commerciale à partir de zéro avec Python
Démonisez une application Web Python avec Supervisor
Faisons la voix lentement avec Python
Créé un voyage de fléchettes avec python (news)
J'ai essayé un langage fonctionnel avec Python
[Python] Une application web rapide avec Bottle!