范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

上穷碧落下凡尘Win10基于Docker配置Elasticsearch7全文检索交互

  基于文档式的全文检索引擎大家都不陌生,之前一篇文章:使用Redisearch实现的全文检索功能服务,曾经使用Rediseach来小试牛刀了一把,文中戏谑的称Rediseach已经替代了Elasticsearch,其实不然,Elasticsearch作为老牌的全文检索引擎还并没有退出历史舞台,依旧占据主流市场,桃花依旧笑春风,阿里也在其ecs服务中推出了云端Elasticsearch引擎,所以本次我们在Win10系统中依托Docker来感受一下Elasticsearch的魅力。
  首先安装Docker,具体流程请参照:win10系统下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑),这里不再赘述。
  拉取Elasticsearch镜像,这里我们使用7.0以上的版本,该版本从性能和效率上都得到了优化。 docker pull elasticsearch:7.2.0
  随后运行Elasticsearch镜像 docker run --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.2.0
  容器别名我们就用缩写es来替代,通过 9200 端口并使用 Elasticsearch 的原生 传输 协议和集群交互。集群中的节点通过端口 9300 彼此通信。如果这个端口没有打开,节点将无法形成一个集群,运行模式先走单节点模式。
  启动容器成功后,可以访问一下浏览器: http://localhost:9200
  OK,没有任何问题,Elasticsearch 采用 YAML 文件对系统进行配置,原理很简单,就像Django的settings或者Flask的Config,只要通知Elasticsearch服务在运行过程中一些你想要的功能,而Elasticsearch会找到elasticsearch.yml,之后按你指定的参数运行服务。
  此时,我们需要将容器内部Elasticsearch的配置文件拷贝出来,这样以后启动容器就可以按照我们自己指定的配置来修改了。 docker cp 容器id:/usr/share/elasticsearch/config/elasticsearch.yml ./elasticsearch.yml
  老规矩,前面的是容器内地址,后面的是宿主机地址,这里我就拷贝到当前目录下,当然了,你也可以指定绝对路径。
  打开elasticsearch.yml,可以自己加一些配置,比如允许跨域访问,这样你这台Elasticsearch就可以被别的服务器访问了,这是微服务全文检索系统架构的第一步。 cluster.name: "docker-cluster" network.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: "*"
  然后停止正在运行的Elasticsearch容器,并且删除它。 docker stop 容器id docker rm $(docker ps -a -q)
  再次启动Elasticsearch容器,这一次不同的是,我们需要通过-v挂载命令把我们刚刚修改好的elasticsearch.yml挂载到容器内部去,这样容器就根据我们自己修改的配置文件来运行Elasticsearch服务。 docker run --name es -v /es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.2.0
  这里需要注意一点,就是在Win10宿主机里需要单独设置一下共享文件夹,这里我设置的共享文件夹叫做es,如果是Centos或者Mac os就直接写真实物理路径即可。
  这里再简单介绍一下Win10如何设置共享文件夹用来配合Docker的挂载,打开virtualBox设置,新建一个共享文件夹es
  随后,重启Docker,输入命令进入默认容器:docker-machine ssh default
  在容器根目录能够看到刚刚设置的共享文件夹,就说明设置成功了。
  另外还有一个需要注意的点,就是Elasticsearch存储数据也可以通过-v命令挂载出来,如果不对数据进行挂载,当容器被停止或者删除,数据也会不复存在,所以挂载后存储在宿主机会比较好一点,命令是:
  docker run --name es -v /es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /es/data:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:7.2.0
  再次启动容器成功之后,我们就可以利用Python3来和全文检索引擎Elasticsearch进行交互了,安装依赖的库。 pip3 install elasticsearch
  新建es_test.py测试脚本
  建立Elasticsearch的检索实例 from elasticsearch import Elasticsearch   es = Elasticsearch(hosts=[{"host":"Docker容器所在的ip", "port": 9200}])
  这里的host指容器ip,因为可以扩展集群,所以是一个list,需要注意一点,如果是Win10就是系统分配的那个ip,Centos或者Mac os直接写127.0.0.1即可。
  建立索引(Index),这里我们创建一个名为 article 的索引 result = es.indices.create(index="article", ignore=400) print(result)  {"acknowledged": True, "shards_acknowledged": True, "index": "article"}
  其中的 acknowledged 字段表示创建操作执行成功。
  删除索引也是类似的,代码如下: result = es.indices.delete(index="article", ignore=[400, 404]) print(result)  {"acknowledged": True}
  插入数据,Elasticsearch 就像 MongoDB 一样,在插入数据的时候可以直接插入结构化字典数据,插入数据可以调用 index() 方法,这里索引和数据是强关联的,所以插入时需要指定之前建立好的索引。 data = {"title": "我在北京学习人工智能", "url": "http://123.com","content":"在北京学习"} result = es.index(index="article",body=data) print(result)  {"_index": "article", "_type": "_doc", "_id": "GyJgb3MBuQaE6wYOApTh", "_version": 1, "result": "created", "_shards": {"total": 2, "successful": 1, "failed": 0}, "_seq_no": 5, "_primary_term": 1}
  可以看到index()方法会自动生成一个唯一id,当然我们也可以使用create()方法创建数据,不同的是create()需要手动指定一个id。
  修改数据也非常简单,我们同样需要指定数据的 id 和内容,调用 index() 方法即可,代码如下: data = {"content":"在北京学习python"}  #修改 result = es.index(index="article",body=data, id="GyJgb3MBuQaE6wYOApTh")  {"_index": "article", "_type": "_doc", "_id": "GyJgb3MBuQaE6wYOApTh", "_version": 2, "result": "updated", "_shards": {"total": 2, "successful": 1, "failed": 0}, "_seq_no": 6, "_primary_term": 1}
  删除数据,可以调用 delete() 方法,指定需要删除的数据 id 即可 #删除 result = es.delete(index="article",id="GyJgb3MBuQaE6wYOApTh") print(result)  {"_index": "article", "_type": "_doc", "_id": "GyJgb3MBuQaE6wYOApTh", "_version": 3, "result": "deleted", "_shards": {"total": 2, "successful": 1, "failed": 0}, "_seq_no": 7, "_primary_term": 1}
  查询数据,这里可以简单的查询全量数据: #查询 result = es.search(index="article") print(result)  {"took": 1079, "timed_out": False, "_shards": {"total": 1, "successful": 1, "skipped": 0, "failed": 0}, "hits": {"total": {"value": 5, "relation": "eq"}, "max_score": 1.0, "hits": [{"_index": "article", "_type": "blog", "_id": "1", "_score": 1.0, "_source": {"title": "我在北京学习人工智能", "url": "http://123.com", "content": "在北京学习"}}, {"_index": "article", "_type": "blog", "_id": "FyIdb3MBuQaE6wYO8JQR", "_score": 1.0, "_source": {"title": "你好", "content": "你好123"}}, {"_index": "article", "_type": "blog", "_id": "GCIeb3MBuQaE6wYOnpSv", "_score": 1.0, "_source": {"title": "你好", "url": "http://123.com", "content": "你好123"}}, {"_index": "article", "_type": "blog", "_id": "GSJfb3MBuQaE6wYOu5RD", "_score": 1.0, "_source": {"title": "你好", "url": "http://123.com", "content": "你好123"}}, {"_index": "article", "_type": "blog", "_id": "GiJfb3MBuQaE6wYO5pR4", "_score": 1.0, "_source": {"title": "你好", "url": "http://123.com", "content": "你好123"}}]}}
  还可以进行全文检索,这才是体现 Elasticsearch 搜索引擎特性的地方。 mapping = {     "query": {         "match": {             "content": "学习 北京"         }     } }  result = es.search(index="article",body=mapping) print(result)  {"took": 4, "timed_out": False, "_shards": {"total": 1, "successful": 1, "skipped": 0, "failed": 0}, "hits": {"total": {"value": 1, "relation": "eq"}, "max_score": 4.075481, "hits": [{"_index": "article", "_type": "blog", "_id": "1", "_score": 4.075481, "_source": {"title": "我在北京学习人工智能", "url": "http://123.com", "content": "在北京学习"}}]}}
  可以看出,检索时会对对应的字段全文检索,结果还会按照检索关键词的相关性进行排序,这就是一个基本的搜索引擎雏形。
  除了这些最基本的操作,Elasticsearch还支持很多复杂的查询,可以参照最新的7.2版本文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.2/query-dsl.html
  结语:体验了之后,有人说,Elasticsearch这玩意还真不错,能不能把Mysql或者Mongo全都扔了,就拿它当数据库不就完事了吗?答案当然是不可能的,因为Elasticsearch没有事务,而且是查询是近实时,写入速度很慢,只是读取数据快,成本也比数据库高,几乎就在靠吃内存提高性能,它目前只是作为搜索引擎的存在,如果你的业务涉及全文检索,那么它就是你的首选方案之一。

寻找会飞天的赶迪约与佤族少年,挑战限时自驾790公里抵达香格里拉本周日2130,山东卫视边境探索类综艺节目行进中国第九期精彩继续。上期行进团沉浸在咖啡和牛油果之乡,和村民打交道,享受熟悉而亲切的烟火气与人情味,和归乡的新农人畅谈他们的理想与坚持震撼!绝美!西藏境内新发现一处超大型冰洞来源西藏日报近日在西藏昌都市边坝县边坝镇普玉一村三色湖附近发现一处超大型冰洞贡嘎冰洞冰洞呈美丽的弧拱造型最震撼的地方在于超大的冰洞双向皆可进入据初步勘测贯穿的大冰洞长约165米宽约当最帅甘孜文旅局长遇上拦路讨要红包的大妈网友砸饭碗最近,甘孜从一个名不见经传的自治州变得家喻户晓,就是因为甘孜文旅局有位帅气新潮的刘洪局长。要说起来,引起我这个吃瓜群众注意还是刘洪局长的那句硬核喊话谁要敢砸了甘孜旅游的锅锅,我就砸珠海新夜市,终于藏不住了!人山人海旺到爆珠海金鼎夜市还有很多人都不知道每晚这里人声鼎沸,热闹非凡各种各样的美食足以填满512G的胃即使是路过都要胖上3斤夜色将暗,霓虹微闪,热闹才刚打头欢迎来到金鼎夜市说起热闹的代名词,夜湖北鄂州和黄冈只有一桥之隔,为何两城不合并?听听当地人的说法说到旅游,你最想去哪个城市?不仅在最近几年,而且在过去几年,中国一直在大力发展旅游业。我们可以在节假日的时候看出人流量的增长,特别是在过年国庆小长假,我们可以看出中国人真的很喜欢旅2023汉中油菜花赏花全攻略3月至5月,汉中将是一片油菜花的海洋。3月18日,2023中国最美油菜花海汉中旅游文化节活动启动仪式将在汉中市南郑区阳春镇陈村举办,今年的油菜本月中旬陆续进入花期,相比去年提前352023,来泰州体验水城慢生活来源交汇点新闻客户端泰州的城市,名曰水城泰州的乡村,人称水乡泰州的世界,一派水的世界。水城慢生活,尘世幸福多。住在泰州的人,生活就是在旅行来泰州旅行的人,旅行也是在生活。河有万湾多春游河北邢台市推出多条赏花踏青主题线路近日,邢台市在春季推出牛城花事系列活动,主打春季赏花踏青主题,集中活动有信都区九龙峡桃花节巨鹿杏花节清河山楂花节柏乡汉牡丹文化节金沙河油菜花节威县梨花节等。01线路一市区九龙峡路罗沪上抢钱七人组上新扩列至8位?也有人表示这回钱包安全了!这几天上海迪士尼连日火爆!开园冲刺不输军训,一天比一天卷只因上海迪士尼恢复迪士尼朋友拥抱等互动为了和自己喜爱的卡通人物抱抱贴贴甚至还有人排队6小时今天小坊又有一个好消息要告诉迪士尼WTT新乡冠军赛2023新闻发布会举行3月10日,WTT新乡冠军赛2023新闻发布会举行。中国乒乓球协会业务部部长李谧,新乡市委常委常务副市长孙栋,新乡市委常委宣传部长杨彦玲,河南省体育总会副主席河南省乒乓球协会主席王红海湾城乡美丽蝶变,发展底气更足今年春节假期后,红海湾遮浪半岛旅游区落日冲浪店海边路路牌等场所,成了游客的热门打卡地大家拍片取景的地方。若论起红海湾乡村振兴最直观的感受是什么?莫过于城乡面貌。对此,老红海湾人感触
中国女足热身结果不如人意世界杯仍要抱有希望近日中国女足结束欧洲拉练,虽然大败西班牙,在瑞士身上也没占到便宜,首先要相信我们的姑娘们已经尽力了,其次不得不说欧洲女足发展迅猛。此外,女足直接临场发挥也非常关键,因此对强队也不能大学篮球哪家强?Cuba谁是王?中国大学生篮球联赛,简称CUBAL,是中国大学体育协会主办的高校间篮球联赛,其宗旨发展高校篮球,培养篮球人才,模式参照美国的NCAA大学篮球联赛形式,中央电视台CCTV5等每年都会春季尝鲜,别错过这5道食谱!鲜嫩可口还下饭,大人孩子都爱吃!告别油腻的冬日,品尝清爽的春天。春天万物复苏,是一年中生长收藏的春生时节,春天吃春菜,不仅能补充营养,此时多吃一些应季蔬菜对身体好处多多,让我们从外到内感受舌尖上春天的味道。今天,今天分享几款我们全家都超爱的营养搭配食谱,好喝到停不下来!今天分享几款我们全家都超爱的营养搭配食谱,款款好喝,好喝到停不下来!一周小米食谱小米花生露小米山药糊小米玉米糊红薯小米糊小米胡萝卜糊小米南瓜糊一周胡萝卜食谱胡萝卜燕麦奶胡萝卜豆奶胡阿伟吃过的天价红薯,看董哥如何把价格打下来!抖音汽车你这个红薯卖的也太贵了,7块。咋又成7块了?阿伟,阿伟已经死了,你选的嘛偶像。看看今天能不能把这个红薯价格给打下来。红薯我吃定了,地瓜还是红薯,得展示我的秘籍。咱买地瓜也得展示一波辛巴实现了各自的商业蓝海助农九阳公益厨房栖霞市全覆盖落成消费市场格局加速重塑,直播电商行业发展从日新月异进入了稳步上升期,直播电商行业内直播团队或企业的供应链优势和市场作用也进一步得到了凸显。在供应链的加持下,如辛巴和辛选集团一样的头部探求世界高龄老人,长寿秘诀日本将制作长寿食谱据报道,最近日本宣布,将在2023年推出一份长寿食谱,以独特的方式揭示长寿秘诀。该食谱将特别关注寿命的延长和寿命的质量,其重点将放在找到最适合我们生活的长寿饮食,据称这一食谱将突破他定下新目标,让红薯产业接二连三4月2日上午,菏泽市成武县苟村集镇刚强家庭农场主41岁的王刚强奔走在田间地头,为村民发放今年的红薯苗。这几天,已经向300多名村民发放了红薯苗。王刚强告诉记者,红薯苗免费提供给村民AI绘画美学(82)女友和你出门你会选哪件?在现代社会,女性外出逛街已经成为了一种常见的活动,而如何通过着装彰显自己的气质也成为了很多女性关注的问题。一选择适合自己的颜色和款式颜色和款式是着装的两个重要因素,它们会直接影响到大油田怎么高效控油,过来人的经验之谈油皮高效去油攻略30年的油皮经验。我作为30多年的大油皮,就是怎么去控油?今天我就把我这半辈子通通告诉你,高效去油攻略,让你少走弯路,清爽度过每一天。第一点就是洗脸问题。你是不是就频繁春天里的牛仔裤,这么穿最时髦我相信在牛仔裤诞生之初,谁也不会它在日后成为人手必备的单品。毕竟只有牛仔裤才能做到集粗犷硬朗以及优雅浪漫于一身。怪不得连圣罗兰都感叹,自己为什么不是牛仔裤的发明人了。以我穿牛仔裤多