import time
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
# 创建相关实例
es = Elasticsearch()
# using参数是指定Elasticsearch实例对象,index指定索引,可以缩小范围,index接受一个列表作为多个索引,且也可以用正则表示符合某种规则的索引都可以被索引,如index=["bank" , "banner" , "country" ]又如index=["b*" ]后者可以同时索引所有以b开头的索引,search中同样可以指定具体doc-type
s = Search(using=es, index="time_appid_placementid_country" )
# 添加索引,其中index和doc_type自己指定一个值即可,id可以指定,如果没有指定elasticsearch会随机分配,body即为索引的内容
dict_1 = {
"any" : "test" , "timepstamp" : "ddd" }
es.index (index ="bank" , doc_type="account" , id="qwe" , body=dict_1)
# 通过id获取特定文档,各参数的意义同上
res = es.get (index="bank" , doc_type="account" , id=1 )
# 根据字段查询,可以多个查询条件叠加,hightlight可以指定高亮,但是我的没有出现高亮,对数据处理没啥用不去深究
# res_2 = s.query ("match" , gender="F" ).query ("match" , age="32" ).highlight("age" ).execute()
# 用Q ()对象查询多个对象,在多个字段中,fields是一个列表,可以存放多个field,query 为所要查询的值,如果要查询多个值可以用空格隔开(似乎查询的时候Q 对象只接受同种类型的数据,如果文本和数字混杂在一块就会报错,建立查询语句出错,有待考察,如query ="Amber 11" 就会失败,fields也是一样,另外query 可以接受单个数字的查询,如果是多个同样会报相同的错误)
# Q ()第一个参数是查询方法,具体用法及其他方法可以参考elasticsearch的官方文档
q = Q ("multi_match" , query ="Amber Hattie" , fields=["firstname" ])
res_3 = s.query (q).execute()