标签:new 微信 策略 缺点 view 占用 span ase not
作者:白宁超
2019年5月24日17:22:41
导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装。只有它们都正确,软件才能运行。如果从一种操作系统里面运行另一种操作系统,通常我们采取的策略就是引入虚拟机,比如在 Windows 系统里面运行 Linux 系统。这种方式有个很大的缺点就是资源占用多、冗余步骤多、启动慢。目前最流行的 Linux 容器解决方案之一就是Docker,它最大优点就是轻量、资源占用少、启动快。本文从什么是Docker?Docker解决什么问题?有哪些好处?如何去部署实现去全面介绍。
1.1 概念介绍
Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,它可以快速地储存、搜索和分析海量数据。Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch至少需要Java 8。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
通过上述四种查询方式,我们不难发现,由于 Lucene 是以倒排表的形式存储的。所以在 Lucene 的查找过程中只需在词典中找到这些 Term,根据 Term 获得文档链表,然后根据具体的查询条件对链表进行交、并、差等操作,就可以准确地查到我们想要的结果。相对于在关系型数据库中的“Like”查找要做全表扫描来说,这种思路是非常高效的。虽然在索引创建时要做很多工作,但这种一次生成、多次使用的思路也是很高明的。
2.0
下提供。本文主要采用Win10下的Elasticsearch安装,当然Linux安装操作起来更加简便了。完成之后对python安装elasticsearch包,并实现交互案例。
第一步:条件检查:Elasticsearch至少需要Java 8,首先需要java -version查看当前版本。
第二步:安装ES,这里采用elasticsearch-7.1.0-windows-x86_64下载地址链接: https://pan.baidu.com/s/1k5AOGpMy8uJEXtA6KoNb7g 提取码: qtmj 。
bin :运行Elasticsearch实例和插件管理所需的脚本 confg: 配置文件所在的目录 lib : Elasticsearch使用的库 data : Elasticsearch使用的所有数据的存储位置 logs : 关于事件和错误记录的文件 plugins: 存储所安装插件的地方,比如中文分词工具 work : Elasticsearch使用的临时文件,这个文件我这暂时好像没有,可以根据配置文件来 配置这些个文件的目录位置,比如上面的data,logs,
然后去运行 bin/elasticsearch(Mac 或 Linux)或者 bin\elasticsearch.bat (Windows) 即可启动 Elasticsearch 了。我们启动后发现网页并不现实信息,测试下本地网络是否联通:
发现是一般性故障,查询资料显示由于防火墙的问题,经过测试关闭”公用网络防火墙“即可:
之后我们再去ping下本地IP:
这时已经显示ping通状态,再次启动bin\elasticsearch.bat (Windows),打开http://localhost:9200/显示如下表示成功安装ES。
第三步:Python安装ES, 下载地址是https://www.elastic.co/downloads/elasticsearch。如果在windows下安排部署参考文章http://www.cnblogs.com/viaiu/p/5715200.html。如果是Python开发可以使用pip install elasticsearch安装。
插入数据:打开python运行环境,首先导入【from elasticsearch import Elasticsearch】,然后编写插入数据的方法:
# 插入数据 def InsertDatas(): # 默认host为localhost,port为9200.但也可以指定host与port es = Elasticsearch() es.create(index="my_index",doc_type="test_type",id=11,ignore=[400,409],body={"name":"python","addr":‘四川省‘}) # 查询结果 result = es.get(index="my_index",doc_type="test_type",id=11) print(‘单条数据插入完成:\n‘,result)
实例化Elasticsearch,其中默认为空即host为localhost,port为9200。为空也可以指定网络IP与端口。通过创建索引index和文档类别doc_type,文档id,body为插入数据的内容,其中ES支持的数据仅为JSON类型,ignore=409忽略异常。运行结果如下:
批量插入数据:上面案例我们插入一条信息,查询显示一系列参数包括索引、文档类型、文档ID唯一标识,版本号等。其中资源中包含数据信息,如果我们想插入多条信息可以参考以下代码:
# 批量插入数据 def AddDatas(): es = Elasticsearch() datas = [{ ‘name‘: ‘美国留给伊拉克的是个烂摊子‘, ‘addr‘: ‘http://view.news.qq.com/zt2011/usa_iraq/index.htm‘ },{ "name":"python", "addr":‘四川省‘ }] for i,data in enumerate(datas): es.create(index="my_index",doc_type="test_type", id=i,ignore=[400,409],body=data) # 查询结果 result = es.get(index="my_index",doc_type="test_type",id=0) print(‘\n批量插入数据完成:\n‘,result[‘_source‘])
我们将数据放在datas列表中,如果我们数据在一个json文件中存储,也可以通过读取文本信息并保存在datas中,之后对其进行插入即可。这里面文件ID我采用枚举的序号,也可以采用随机数或者指定格式。完成所有插入之后我们选择第一条id=0的信息查询,此处查询与上文不同,我们只看文章内容可以采用result[‘_source‘]方法,结果如下:
更新数据:如果我们插入数据信息有问题,我们想去修正。可以采用update方法,这里面与我们接触的MySQL,MongoDB等SQL语句差不多。唯一注意的是我们更新数据时候采用{"doc":{"name":"python1","addr":"深圳1"}}字典模式,尤其是doc标识不能忘记,代码实现如下:
# 3 更新数据 def UpdateDatas(): es = Elasticsearch() es.update(index="my_index",doc_type="test_type", id=11,ignore=[400,409],body={"doc":{"name":"python1","addr":"深圳1"}}) # 更新结果 result = es.get(index="my_index",doc_type="test_type",id=11) print(‘\n数据id=11更新完成:\t‘,result[‘_source‘][‘name‘])
这里我们假如只想查询更新后信息的name字段,可以采用source后面加[‘name‘]方法,为什么这么设置呢?请参看插入数据运行结果分析。
删除数据:这里面比较简单,我们指定文档的索引、文档类型和文档ID即可。
# 删除数据 def DeleteDatas(): es = Elasticsearch() result = es.delete(index=‘my_index‘,doc_type=‘test_type‘,id=11) print(‘\n数据id=11删除完成:\t‘)
条件查询数据:我们通过插入数据构建一个简单我数据信息,如果我们想获取索引中的所有文档可以采用{"query":{"match_all":{}}}条件查询,这里面指定关注的是使用的search方法,上文查询数据采用get方法,其实两者都是可以作为查询使用的。代码如下:
# 条件查询 def ParaSearch(): es = Elasticsearch() query1 = es.search(index="my_index", body={"query":{"match_all":{}}}) print(‘\n查询所有文档\n‘,query1) ? query2 = es.search(index="my_index", body={"query":{"term":{‘name‘:‘python‘}}}) print(‘\n查找名字Python的文档:\n‘,query2[‘hits‘][‘hits‘][0])
我们获取索引所有文档的信息
获取文档中name为Python的信息
【机器学习和自然语言QQ群:436303759】:
机器学习和自然语言(QQ群号:436303759)是一个研究深度学习、机器学习、自然语言处理、数据挖掘、图像处理、目标检测、数据科学等AI相关领域的技术群。其宗旨是纯粹的AI技术圈子、绿色的交流环境。本群禁止有违背法律法规和道德的言谈举止。群成员备注格式:城市-自命名。微信订阅号:datathinks
标签:new 微信 策略 缺点 view 占用 span ase not
原文地址:https://www.cnblogs.com/baiboy/p/ES.html