<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Sacar la lista de 250 Pelis
Step1:  Sacar toda la info de una peli para poder meterla en un diccionario y usarla en ElasticSearch, indexandola (metodo todo en 1)
Tarda bastante en ejecutarse (5 a 15 min), mete 250 peliculas en elastic
quitado parametro de es.index (, id=i)
Coge el sumario de cada peli de la lista, y guarda la info en elasticSearch
Step2:  Pruebas
Step3:  Elastic Seach (cabezera de ejemplo)
Step4:  Inicializacion real de Elastic Search (ejecutar)
Step5:  Guardamos el top 250 dentro de elastic search (antiguo)
Step6:  Buscamos los datos guardados (antiguo)
Step7:  Sacar los hits e info de unos cuantos de ellos
Step8:  Query sin fuzziness
No funciona si le quitas una letra, la query de abajo si al ser fuzzy
Step9:  Query con fuzziness añadida
Step10:  Query 2 con highlight de distintos campos y la forma de mostrarlo
Step11:  Borrar datos
<ASSISTANT_TASK:>
Python Code:
from imdb import IMDb
from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch()
ia = IMDb()
listaPelis = ia.get_top250_movies()
listaPelis
Explanation: Sacar la lista de 250 Pelis
End of explanation
for i in range(10,250):
    peli = listaPelis[i]
    peli2 = ia.get_movie(peli.movieID)
    string = peli2.summary()
    separado = string.split('\n')
    solucion = {}
    for i in range(2,len(separado)):
        sep2 = separado[i].split(':')
        #Forma de evitar que haya fallo al pasar el split a diccionario
        #Caso del fallo en los 2 cuadros de abajo
        sep2[1:len(sep2)] = [''.join(sep2[1:len(sep2)])]
        solucion.update(dict([sep2]))
    es.index(index='prueba-index', doc_type='text', body=solucion)
separado
sep2[1]
Explanation: Sacar toda la info de una peli para poder meterla en un diccionario y usarla en ElasticSearch, indexandola (metodo todo en 1)
Tarda bastante en ejecutarse (5 a 15 min), mete 250 peliculas en elastic
quitado parametro de es.index (, id=i)
Coge el sumario de cada peli de la lista, y guarda la info en elasticSearch
End of explanation
import pandas as pd
lista=[]
for i in range(0400000,0400010,1):
    peli = ia.get_movie(i)
    lista.append(peli.summary())
    
datos = pd.DataFrame(lista)
print datos.values
import pandas as pd
lista=[]
datos = pd.DataFrame([])
for i in range(0005000,0005003):
        lista.append(ia.get_movie(i))
        lista.append(ia.get_movie_plot(i))
        datos = datos.append(lista)
print datos.values
Explanation: Pruebas
End of explanation
from datetime import datetime
from elasticsearch import Elasticsearch
es = Elasticsearch()
'''
doc = {
    'prueba': 'Holi',
    'text': 'A man throws away an old top hat and a tramp uses it to sole his boots.',
}
res = es.index(index="movies-index", doc_type='text', id=1, body=doc)
print(res['created'])
'''
res = es.get(index="movies-index", doc_type='text', id=6)
print(res['_source'])
es.indices.refresh(index="movies-index")
res = es.search(index="movies-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
    print("%(text)s" % hit["_source"])
Explanation: Elastic Seach (cabezera de ejemplo)
End of explanation
# make sure ES is up and running
import requests
res = requests.get('http://localhost:9200')
print(res.content)
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
Explanation: Inicializacion real de Elastic Search (ejecutar)
End of explanation
#Lista con el top 250 de peliculas
top = ia.get_top250_movies()
#Recorro la lista y saco los datos para indexarlos en elastic search, el id es el orden en la lista
for i in range(0,250):
    es.index(index='films-index', doc_type='text', id=i, body=top[i].data)
Explanation: Guardamos el top 250 dentro de elastic search (antiguo)
End of explanation
res = es.search(index="films-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total'])
#Modificar para que funcione
for hit in res['hits']['hits']:
    print("%(kind)s %(title)s %(year)s %(rating)s" % hit["_source"])
Explanation: Buscamos los datos guardados (antiguo)
End of explanation
res = es.search(index="prueba-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
    print("%(Title)s %(Genres)s %(Director)s %(Cast)s %(Writer)s %(Country)s %(Language)s %(Rating)s %(Plot)s" % hit["_source"])
res = es.search(index="prueba-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
    print("%(Title)s" % hit["_source"])
res = es.search(index="prueba-index", body={"query": {"match_all": {}}})
res
res = es.search(index="prueba-index", body={
    "query": 
        {"match" : {'Director': 'Christopher Nolan'}
    },
    {
        "highlight" : {
            "fields" : {
                "Language" : {}
            }
        }
    }
})
res
Explanation: Sacar los hits e info de unos cuantos de ellos
End of explanation
res = es.search(index="prueba-index", body={"query": {"match" : {'Director': 'Christophe Nola'}}})
print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
    print("%(Title)s" % hit["_source"])
Explanation: Query sin fuzziness
No funciona si le quitas una letra, la query de abajo si al ser fuzzy
End of explanation
bodyQuery = {
    "query": {
       "multi_match" : {
            "query" : "Interes",
            "fields": ["Plot", "Title"],
            "fuzziness": "2",
            "type": "phrase",
        }
    }
}
res = es.search(index="prueba-index", body=bodyQuery)
#print res
#print("Got %d Hits:" % res['hits']['total'])
for hit in res['hits']['hits']:
    print("%(Title)s" % hit["_source"])
Explanation: Query con fuzziness añadida
End of explanation
bodyQuery2 = {
    "query": {
        "match": {
            "_all":"Inter"
        }
    },
    "highlight" : {
        "fields" : {
            "Title" : {},
            "Plot" : {"fragment_size" : 150, "number_of_fragments" : 3}
        },
        #Permite el hightlight sobre campos que no se han hecho query
        #como Plot en este ejemplo
        "require_field_match" : False
    }
}
res = es.search(index="prueba-index", body=bodyQuery2)
print("Got %d Hits:" % res['hits']['total'])
# Uso el [0] porque solo hay 1 hit, si hubiese mas, pues habria mas campos
# de la lista, habria que usar el for de arriba para sacar el highlight de
# cada uno de la lista
#print res['hits']['hits'][0]['highlight']
for hit in res['hits']['hits']:
    print(hit)
Explanation: Query 2 con highlight de distintos campos y la forma de mostrarlo
End of explanation
es.delete(index='prueba-index', doc_type='text', id=1)
Explanation: Borrar datos
End of explanation
<END_TASK>