Python学习笔记-ElasticSearch操作

安装:pip install -U elasticsearch  (Successfully installed elasticsearch-7.0.3)

ElasticSearch版本:elasticsearch-7.3.0

Python操作代码如下

# -*- coding:utf-8 -*-

import os
import sys
from elasticsearch import Elasticsearch

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)

es = Elasticsearch([{'host': '192.168.0.1', 'port': 19201}], timeout=3600)

netease_news_mapping = {
    'properties': {
        "id": {
            "type": "keyword"
        },
        "url": {
            "type": "keyword"
        },
        "title": {
            "analyzer": "ik_smart",
            "type": "text"
        },
        "content": {
            "analyzer": "ik_smart",
            "type": "text"
        },
        "create_time": {
            "type": "text"
        },
        "type": {
            "type": "keyword"
        }
    }
}


def create_index_and_mapping():
    es.indices.delete(index='netease_news_v1', ignore=[400, 404])
    es.indices.create(index='netease_news_v1', ignore=400)
    es.indices.put_mapping(index='netease_news_v1', doc_type='news', body=netease_news_mapping, include_type_name=True)
    es.indices.put_alias(index='netease_news_v1', name='netease_news')

    es.indices.delete(index='netease_news_v2', ignore=[400, 404])
    es.indices.create(index='netease_news_v2', ignore=400)
    netease_news_mapping_file = os.path.abspath(os.getcwd() + os.sep + 'mapping' + os.sep + 'netease_news.json')
    with open(netease_news_mapping_file, 'rb') as mf:
        lines = mf.readlines()
    es.indices.put_mapping(index='netease_news_v2', doc_type='news', body=(''.join(lines)), include_type_name=True)
    es.indices.put_alias(index='netease_news_v2', name='netease_news')


def create_or_update_setting():
    setting_file = os.path.abspath(os.getcwd() + os.sep + 'setting' + os.sep + 'settings.json')
    with open(setting_file, 'rb') as sf:
        lines = sf.readlines()
    es.indices.close(index='netease_news_v2')
    es.indices.put_settings(index='netease_news_v2', body=(''.join(lines)))
    es.indices.open(index='netease_news_v2')


def create_index_type_data():
    body = {
        "url": "http://gz.news.163.com/19/0822/17/EN700FN104108DGB.html",
        "title": "智能机器人为人类“分忧” 专利助推行业创新发展",
        "content": "人工巡检不能抵达?频率太低?让智能机器人出马!\n在贵州,随着科技部FAST“智能机器人”重点定向专项的启动申报,中国天眼的运维将迎来一个智能化时代,为保障其有效观测时间提供重要技术支撑,将在很大程度上提高中国天眼的运行及维护效率,让其“多出成果、出好成果、出大成果”。在青岛,通过身穿“黄衣”的水下机器人在浑浊水域拍摄的清晰视频,记者可以看到青岛罗博飞海洋物联网系统传回的荣成等地的养殖画面和生态数据。\n机器人被誉为“制造业皇冠上的明珠”。“人工智能”2017年第一次进入政府工作报告,今年已经是第三年出现在政府工作报告之中。今年的政府工作报告将“人工智能”升级为“智能+”,提出要打造工业互联网平台,拓展“智能+”,为制造业转型升级赋能。\n《中国机器人产业发展报告2018》显示,过去6年我国机器人市场平均增长率接近30%。2018年国内机器人市场规模预计达到87.4亿美元,约占全球1/3。在工业4.0与中国智造的变革浪潮中,一批以智能制造、智慧服务为使命与愿景的机器人企业竞相涌现。\n在广东,截至2018年,广东省机器人及相关配套产业产值600亿元,自主品牌工业机器人产量超过3.2万台套,占全国22%。服务机器人产量超200万台套,占全球四分之一。\n\n机器人产业快速发展,如何保护知识产权成为各个企业关注的重点。在安徽芜湖机器人产业园,随着企业的不断入驻,专利申请量超过3000件。\n据芜湖机器人产业园相关负责人介绍,相较于国内其他机器人园区,芜湖机器人产业园专利申请量最多,发明专利申请占比最高。机器人企业集群范围广,既有整机企业集群,也有关键零部件企业集群和系统集成企业集群,专利技术分布涉及机器人制造的各个方向。\n在专利的保驾护航下,埃夫特、酷哇等企业快速发展,在国内机器人行业占据一席之地。\n作为较早入驻芜湖机器人产业园的一家企业,埃夫特通过兼并、引进和吸收海外机器人领域的先进技术和经验,在机器人喷涂、系统集成、运动控制器、下游产业链领域迅速跻身世界先进水平,形成从核心零部件到机器人整机再到高端系统集成的全产业链协同发展格局。\n6月26日,埃夫特申请科创板上市。招股说明书公开内容显示,2015年以来,埃夫特先后收购了喷涂机器人制造及系统集成商CMA、通过工业机器人系统集成商EVOLUT、中高端汽车白车身焊接系统集成商WFC,并战略投资运动控制系统设计公司ROBOX,并在国内合资设立希美埃、埃华路、瑞博思等公司。截止目前,埃夫特及其下属子公司共拥有境内外专利184件(包括发明专利35件)及软件著作权7件。\n推出可以像“宠物”一样跟在用户身后自己行走的智能行李箱,与环卫龙头企业中联环境共同发布全球首台全路况清扫、AI智能路径规划的无人驾驶扫地车及清扫机器人……据安徽酷哇机器人有限公司负责人何弢介绍,目前酷哇选择依托于现有项目(如智能驾驶车辆或智能载物机器人项目)进行有计划、针对性的专利产出,并针对竞争对手的产品或者专利进行围栏式专利布局,通过对竞争对手产品或者专利技术方案的研究,结合自身研发实力进行相应专利的预埋,用于专利攻防。\n企业通过参考专利技术方案的技术价值、市场价值、侵权可视度、使用该专利技术方案的产品的销售区域、专利进国家的具体方式(PCT专利进国家或者通过巴黎公约要求优先权进国家)等因素,决定PCT专利申请的数量和进国家的专利技术方案。据统计,酷哇累计申请中国专利206件(包括发明专利172件),其中智能载物机器人相关的技术方案166件,智能驾驶车辆相关的技术方案40件,布局了10件PCT专利,同时布局了2件美国专利申请。\n\n\n",
        "create_time": "2019-08-22 17:48:16"
    }
    result = es.create(index="netease_news_v1", doc_type="news", id='EN700FN104108DGB', body=body, ignore=[400, 409])
    print result


def create_index_type_datas():
    body = [
        {"index": {'_index': 'netease_news_v1', '_type': 'news', '_id': 'EN1001'}},
        {'id': 'EN1001', 'url': 'http://gz.news.163.com/19/0822/17/EN1.html', 'title': '智能标题1', 'content': '智能内容1', 'create_time': '2019-08-22 17:48:01'},
        {"index": {'_index': 'netease_news_v1', '_type': 'news', '_id': 'EN1002'}},
        {'id': 'EN1002', 'url': 'http://gz.news.163.com/19/0822/17/EN2.html', 'title': '智能标题2', 'content': '智能内容2', 'create_time': '2019-08-22 17:48:02'},
        {"index": {'_index': 'netease_news_v1', '_type': 'news', '_id': 'EN1003'}},
        {'id': 'EN1003', 'url': 'http://gz.news.163.com/19/0822/17/EN3.html', 'title': '智能标题3', 'content': '智能内容3', 'create_time': '2019-08-22 17:48:03'},
        {"index": {'_index': 'netease_news_v1', '_type': 'news', '_id': 'EN1004'}},
        {'id': 'EN1004', 'url': 'http://gz.news.163.com/19/0822/17/EN4.html', 'title': '智能标题4', 'content': '智能内容4', 'create_time': '2019-08-22 17:48:04'},
    ]
    result = es.bulk(index='netease_news_v1', doc_type='news', body=body)
    print result


def update_index_type_data():
    body = {
        "doc": {
            "title": "更新 智能机器人为人类“分忧” 专利助推行业创新发展"
        }
    }
    result = es.update(index="netease_news_v1", doc_type="news", id="EN700FN104108DGB", body=body, ignore=[400, 409])
    print result
    get_index_type_data()


def delete_index_type_data():
    result = es.delete(index="netease_news_v1", doc_type="news", id="EN700FN104108DGB")
    print result


def get_index_type_data():
    result = es.get(index="netease_news_v1", doc_type="news", id='EN700FN104108DGB')
    news = result['_source']
    print news['url']
    print news['title']
    print news['content']
    print news['create_time']


def count_index_type_data():
    result = es.count(index='netease_news_v1', body={"query": {"match_all": {}}})
    print result


def search_index_type_data_1():
    # result = es.search(index='netease_news_v1', q='*')
    result = es.search(index='netease_news_v1', body={"query": {"match_all": {}}})
    hits = result['hits']['hits']
    for hit in hits:
        source = hit['_source']
        for key, value in source.items():
            print '%s %s' % (key, value)
        print '----------'


def search_index_type_data_2():
    # result = es.search(index='netease_news_v1', q='title:智能')
    result = es.search(index='netease_news_v1', body={"query": {"term": {"title": u"智能"}}})
    print result['_shards']['total']
    print result['hits']['total']
    hits = result['hits']['hits']
    for hit in hits:
        source = hit['_source']
        for key, value in source.items():
            print '%s %s' % (key, value)
        print '----------'


def search_index_type_data_3():
    result = es.search(index='netease_news_v1', q='title:智能 AND content:内容', scroll='2m', size=2)
    print result['_shards']['total']
    print result['hits']['total']
    for hit in result['hits']['hits']:
        source = hit['_source']
        for key, value in source.items():
            print '%s %s' % (key, value)
        print '----------'
    scroll_id = result['_scroll_id']
    next_result = es.scroll(scroll_id=scroll_id, scroll='2m')
    for hit in next_result['hits']['hits']:
        source = hit['_source']
        for key, value in source.items():
            print '%s %s' % (key, value)
        print '##########'


def search_index_type_data_4():
    page_number = 1
    body = {
        "query": {
            "multi_match": {
                "query": "智能",
                "fields": ['title', 'content']
            }
        },
        "from": (page_number - 1) * 10,
        "size": 10,
        "highlight": {
            'pre_tags': ['<span style=\"color:red\">'],
            'post_tags': ['</span>'],
            'fields': {
                'title': {},
                'content': {}
            }
        }
    }
    result = es.search(index='netease_news_v1', body=body)
    print result['_shards']['total']
    print result['hits']['total']
    for hit in result['hits']['hits']:
        high_light_keys = hit['highlight'].keys()
        source = hit['_source']
        for key, value in source.items():
            if key in high_light_keys:
                print '%s %s' % (key, hit['highlight'][key][0])
            else:
                print '%s %s' % (key, value)
        print '----------'

mapping文件netease_news.json

{
	"dynamic": "strict",
	"_source": {
		"excludes": ["id"]
	},
	"properties": {
		"id": {
			"type": "keyword"
		},
		"url": {
			"type": "keyword"
		},
		"title": {
			"analyzer": "ik_smart",
			"type": "text"
		},
		"content": {
			"analyzer": "ik_smart",
			"type": "text"
		},
		"create_time": {
			"type": "text"
		},
		"type": {
			"type": "keyword"
		}
	}
}

setting文件setting.json

{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "pinyin_analyzer" : {
                    "tokenizer" : "pinyin_tokenizer"
                }
            },
            "tokenizer" : {
                "pinyin_tokenizer" : {
                    "type" : "pinyin",
                    "keep_separate_first_letter" : false,
                    "keep_full_pinyin" : true,
                    "keep_original" : true,
                    "limit_first_letter_length" : 16,
                    "lowercase" : true,
                    "remove_duplicated_term" : true
                }
            }
        }
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonelasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法。你可以通过安装elasticsearch-dsl库来使用它。安装命令是"pip install elasticsearch-dsl"。如果你在Django项目中使用elasticsearch-dsl,你还可以考虑安装django-elasticsearch-dsl-drf库,它可以将Elasticsearch DSL与Django REST框架集成,提供更方便的使用体验。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Elasticsearch python操作实践(elasticsearchElasticsearch DSL)](https://blog.csdn.net/qq_43008709/article/details/109401610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [pythonelasticsearch_dsl模块用法详解](https://blog.csdn.net/m0_72557783/article/details/126957624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [django-elasticsearch-dsl-drf:将Elasticsearch DSL与Django REST框架集成](https://download.csdn.net/download/weixin_42131861/15058672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值