一.官网提供的Elasticsearch的Python接口包

  1.github地址:https://github.com/elastic/elasticsearch-dsl-py

  2.安装:pip install elasticsearch-dsl

  3.有很多api,使用可参考github中的文档

二.定义写入es的Pipeline:

  1.生成索引,type及映射:

    有可能会报IllegalOperation异常,访问本地9200端口查看es版本,然后将python中的elasticsearch和elasticsearch-dsl改成相近版本即可

# _*_ encoding:utf-8 _*_
__author__ = 'LYQ'
__date__ = '2018/10/29 11:02'
#新版本把DocType改为Docment
from datetime import datetime
from elasticsearch_dsl import DocType,Date, Nested, Boolean, \
analyzer, Completion, Keyword, Text, Integer
from elasticsearch_dsl.connections import connections # es连接到本地,可以连接到多台服务器
connections.create_connection(hosts=["localhost"]) class ArticleType(DocType):
"定义es映射"
# 以ik解析
title = Text(analyzer="ik_max_word")
create_date = Date()
# 不分析
url = Keyword()
url_object_id = Keyword()
front_image_url = Keyword()
front_image_path = Keyword()
praise_nums = Integer()
fav_nums = Integer()
comment_nums = Integer()
tags = Text(analyzer="ik_max_word")
content = Text(analyzer="ik_max_word") class Meta:
#定义索引和type
index = "jobbole"
doc_type = "artitle" if __name__ == "__main__":
#调用init()方法便能生成相应所应和映射
ArticleType.init()

  2.创建相应item:

#导入定义的es映射
from models.es import ArticleType
from w3lib.html import remove_tags class ElasticsearchPipeline(object):
"""
数据写入elasticsearch,定义pipeline,记得配置进setting
"""
class ElasticsearchPipeline(object):
"""
数据写入elasticsearch
"""
class ElasticsearchPipeline(object):
"""
数据写入elasticsearch
""" def process_item(self, item, spider):
#将定义的elasticsearch映射实列化
articletype=ArticleType()
articletype.title= item["title"]
articletype.create_date = item["create_date"]
articletype.url = item["url"]
articletype.front_image_url = item["front_image_url"]
if "front_image_path" in item:
articletype.front_image_path = item["front_image_path"]
articletype.praise_nums = item["praise_nums"]
articletype.fav_nums = item["fav_nums"]
articletype.comment_nums = item["comment_nums"]
articletype.tags = item["tags"]
articletype.content = remove_tags(item["content"])
articletype.meta.id = item["url_object_id"] articletype.save()
return item

查看9100端口,数据插入成功

  

class JobboleArticleSpider(scrapy.Item):
...... def save_to_es(self):
"在item中分别定义存入es,方便不同的字段的保存"
articletype = ArticleType()
articletype.title = self["title"]
articletype.create_date = self["create_date"]
articletype.url = self["url"]
articletype.front_image_url = self["front_image_url"]
if "front_image_path" in self:
articletype.front_image_path = self["front_image_path"]
articletype.praise_nums = self["praise_nums"]
articletype.fav_nums = self["fav_nums"]
articletype.comment_nums = self["comment_nums"]
articletype.tags = self["tags"]
articletype.content = remove_tags(self["content"])
articletype.meta.id = self["url_object_id"] articletype.save()
class ElasticsearchPipeline(object):
"""
数据写入elasticsearch
""" def process_item(self, item, spider):
# 将定义的elasticsearch映射实列化
#调用item中的方法
item.save_to_es()
return item

三.搜索建议:

  实质调用anylyer接口如下:

GET _analyze
{
"analyzer": "ik_max_word",
"text" : "Python网络基础学习"
}

  es文件中:

from elasticsearch_dsl.analysis import CustomAnalyzer as _CustomAnalyzer

esc=connections.create_connection(ArticleType._doc_type.using)

class Customanalyzer(_CustomAnalyzer):
"""自定义analyser""" def get_analysis_definition(self):
# 重写该函数返回空字典
return {} ik_analyser = Customanalyzer("ik_max_word", filter=["lowercase"]) class ArticleType(DocType):
"定义es映射"
suggest = Completion(analyzer=ik_analyser)
......

生成该字段的信息

   2.item文件:

......
from models.es import esc
def get_suggest(index, info_tuple):
"""根据字符串和权重生成搜索建议数组"""
used_words = set()
suggests = []
for text, weight in info_tuple:
if text:
# 调用es得analyer接口分析字符串
# 返回解析后得分词数据
words = esc.indices.analyze(index=index, analyer="ik_max_word", params={"filter": ["lowercase"]}, body=text)
# 生成式过滤掉长度为1的
anylyzed_words = set([r["token"] for r in words if len(r) > 1])
# 去重
new_words = anylyzed_words - used_words
else:
new_words = set()
if new_words:
suggests.append({"input": list(new_words), "weight": weight})
  return suggests
class JobboleArticleSpider(scrapy.Item):
......
def save_to_es(self):
articletype = ArticleType()
.......# 生成搜索建议字段,以及字符串和权重
articletype.suggest = get_suggest(ArticleType._doc_type.index,((articletype.title,1),(articletype.tags,7)) ) articletype.save()

  

Python对elasticsearch的CRUD的更多相关文章

  1. python实现elasticsearch操作-CRUD API

    python操作elasticsearch常用API 目录 目录 python操作elasticsearch常用API1.基础2.常见增删改操作创建更新删除3.查询操作查询拓展类实现es的CRUD操作 ...

  2. ElasticSearch第二步-CRUD之Sense

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

  3. Python 操作 ElasticSearch

    Python 操作 ElasticSearch 学习了:https://www.cnblogs.com/shaosks/p/7592229.html 官网:https://elasticsearch- ...

  4. Python 和 Elasticsearch 构建简易搜索

    Python 和 Elasticsearch 构建简易搜索 作者:白宁超 2019年5月24日17:22:41 导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正 ...

  5. Python操作ElasticSearch

    Python批量向ElasticSearch插入数据 Python 2的多进程不能序列化类方法, 所以改为函数的形式. 直接上代码: #!/usr/bin/python # -*- coding:ut ...

  6. 笔记13:Python 和 Elasticsearch 构建简易搜索

    Python 和 Elasticsearch 构建简易搜索 1 ES基本介绍 概念介绍 Elasticsearch是一个基于Lucene库的搜索引擎.它提供了一个分布式.支持多租户的全文搜索引擎,它可 ...

  7. Python中elasticsearch插入和更新数据的实现方法

    Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...

  8. python操作Elasticsearch (一、例子)

    E lasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问El ...

  9. Elasticsearch的CRUD:REST与Java API

    CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...

随机推荐

  1. centos7 开机启动服务链接说明

    环境:centos7 创建的开机启动的链接地址: /etc/systemd/system/multi-user.target.wants/ 如: [root@tiaobanji system]# ll ...

  2. SpringMVC配置多视图-内容协商原理

    SpringMVC配置多视图-内容协商原理 2014年03月06日 16:46:59 日积月累_滴水石穿 阅读数:10964更多 个人分类: SpringMVC   Spring Framework ...

  3. Python 中的浅拷贝和深拷贝

    1. 列表和字典,直接赋值,都是浅拷贝,即赋值双方指向同一地址,因为 Python 对可变对象按引用传递. >>> a = [1, 2, 3] >>> b = a ...

  4. while和do-while语句的异同之处

    while型语句: “先判断,后执行”: while 执行流程: 当程序执行到 while 循环时 , 会首先判断小括号里的值 ,如果值 为假 :结束while语句 , 程序继续向下走  为真 :会把 ...

  5. Python脱产8期 Day07 2019/4/19

    一 数据类型的相互转化 1.哪些类型可以转换为数字类型 2.数字转换为字符串 print(str(10)) 3.字符串与列表相互转换 1.字符串转化为列表:list(字符串) 2.列表转换为字符串:' ...

  6. Python这么强大, 怎样才能快速入坑?

    作为一种年轻的编程语言,Python为何能在短短几年的时间内就以迅雷不及掩耳之势驰骋编程界?答案很简单,在人工智能时代,AlphaGo 都在使用的 Python语言,是最接近 AI 的编程语言. 随着 ...

  7. Clustering[Introduction]

    0. 聚类步骤 为了完成一个聚类任务,必须遵循以下步骤: 特征选择:合适的选择特征,尽可能多的包含任务关心的信息,使得信息冗余减少和最小化是主要目标: 近邻测度:用于定量测量两个特征向量如何" ...

  8. Spring cache 使用说明

    package org.cheng.user.client.service; import java.util.HashMap; import java.util.Map; import org.ch ...

  9. 网盘直链工具 winform版 V1.0

    软件需要.net2.0支持 win7及以上版本用户无需安装 xp用户需要安装 支持网盘:好盘 坚果云 百度云 乐视云 华为网盘 微云 新浪网盘 126disk 速度盘 乐齐盘 天空网盘 千脑网盘 可乐 ...

  10. C# Type.GetType 返回NULL 问题解决记录

    Type.GetType("OP.Client.Html.Resources.KenFengFormMethod"); 从Dll里面获取KenFengFormMethod这个会返回 ...