安装Elasticsearch 全文搜索/大数据分析
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎基于RESTful web接口。Elasticsearch是用Java开发的并作为Apache许可条款下的开放源码发布是当前流行的企业级搜索引擎。设计用于云计算中能够达到实时搜索稳定可靠快速安装使用方便。Elasticsearch的应用场景一个线上商城系统用户需要搜索商城上的商品。在这里你可以用es存储所有的商品信息和库存信息用户只需要输入”空调”就可以搜索到他需要搜索到的商品。一个运行的系统需要收集日志用这些日志来分析、挖掘从而获取系统业务未来的趋势。你可以用logstashELK中的一个产品elasticsearch/logstash/kibana收集、转换你的日志并将他们存储到es中。一旦数据到达es中就你可以在里面搜索、运行聚合函数等操作来挖掘任何你感兴趣的信息。如果你有想基于大量数据数百万甚至数十亿的数据快速调查、分析并且要将分析结果可视化的需求。你可以用es来存储你的数据用kibana构建自定义的可视化图形、报表为业务决策提供科学的数据依据。安装ElasticSearch版本说明ES5 需要 Java 8 及以上的版本。ES7 开始内置了 Java 环境首先确认下jdk有没有安装java -version下载源文件解压重新建一个用户将目录的所属组修改为此用户因为 elasticsearch 无法用 root 用户启动。wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz tar zxvf elasticsearch-6.3.0.tar.gz useradd elasticsearch passwd elasticsearch chown -R elasticsearch:elasticsearch elasticsearch-6.3.0 cd elasticsearch-6.3.0 ./bin/elasticsearch // 启动 ./bin/elasticsearch -d //后台启动 cd config vim jvm.options # 修改参数如下(服务器小不配大容量) -Xms256m -Xmx256m可能存在问题Exception in thread main java.nio.file.AccessDeniedException: /usr/local/src/elasticsearch-6.3.0/config/jvm.options at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) at java.nio.file.Files.newByteChannel(Files.java:361) at java.nio.file.Files.newByteChannel(Files.java:407) at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384) at java.nio.file.Files.newInputStream(Files.java:152) at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:58)报这个错是因为用户的权限不足因此在配置和启动ElasticSearch节点的时候要注意给用户赋予对应的权限chown -R myuser:myuser /usr/local/src/elasticsearch-6.3.0连接Elasticsearch1、Elasticsearch开启之后可以直接通过http://127.0.0.1:9200/查看基本信息。{ name: iEX7av1, cluster_name: elasticsearch, cluster_uuid: 8TMqWFwnTLiBlRKtU7a8YQ, version: { number: 6.3.0, build_flavor: default, build_type: tar, build_hash: 424e937, build_date: 2018-06-11T23:38:03.357887Z, build_snapshot: false, lucene_version: 7.3.1, minimum_wire_compatibility_version: 5.6.0, minimum_index_compatibility_version: 5.0.0 }, tagline: You Know, for Search }安装中文分词 elasticsearch-analysis-ikik有两种分词模式ik_max_word,和ik_smart模式ik_max_word: 会将文本做最细粒度的拆分比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”会穷尽各种可能的组合ik_smart: 会做最粗粒度的拆分比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。索引时为了提供索引的覆盖范围通常会采用ik_max_word分析器会以最细粒度分词索引搜索时为了提高搜索准确度会采用ik_smart分析器会以粗粒度分词。使用ik_max_word会占用更多的存储空间#在线安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip #本地安装 ./bin/elasticsearch-plugin install file:///usr/local/src/elasticsearch-analysis-ik-6.3.0.zip安装好后 重启es会看到 加载了 ik分词了安装完毕后发现在ES的安装目录下的plugins目录下多了一个analysis-ik目录内容是ik的zip包解压后根目录下的所有文件一共是5个jar文件和1个properties配置文件另外ES的安装目录下的config目录下多了一个analysis-ik目录内容是ik的zip包解压后根目录下的config目录下所有文件用于放置ik的自定义词库可视化Elasticvue平台Windows / Mac / Linux 三端原生桌面 App 浏览器插件费用完全免费、开源 MIT 协议无任何功能阉割核心能力完美适配你的阿里云 ES支持账号密码认证、HTTPS、阿里云公网 ES 连接、IP 白名单环境索引可视化浏览、文档表格 / JSON 双视图、单条文档增删改查DSL 编辑器语法高亮、自动格式化、保存常用查询语句Mapping 查看 / 编辑、集群健康监控、分片状态、批量 Bulk 操作支持 ES 7.x/ 8.x 全版本兼容 OpenSearch适合人群日常查 CRM 客户文档、调试 DSL、多环境集群切换90% 开发者首选缺点重度集群监控图表不如 Kibana 专业安装KibanaKibana是一个针对Elasticsearch的开源分析及可视化平台用来搜索、查看交互存储在Elasticsearch索引中的数据。安装Kibana要装与ES相同的版本wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.0-linux-x86_64.tar.gz tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz cd kibana-6.3.0-linux-x86_64 #启动Kibana ./bin/kibanahttp://localhost:5601访问web页面使用POSTMAN工具发送PUT请求创建ES的基本用法ES以RESTFul风格来命名API的, 其API的基本格式如下http://ip:port/索引/类型/文档idES的动作是以http方法来决定的: 常用的http方法: GET/PUT/POST/DELETEes支持多字段结构例如我们将常用的搜索条件和排序字段(销量时间)配置到mappings.properties中{ settings:{ number_of_shards: 3, number_of_replicas: 1 }, mappings:{ man:{ properties:{ word_count:{ type: integer }, author:{ type: keyword }, title:{ type: text }, publish_date:{ type: date, format: yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || epoch_millis } } } } }如下图观察返回结果已经成功。插入文档PUT 127.0.0.1:9200/people/man{ name: chenjie, country: China, age: 30, date: 1994-09-27 }修改文档POST 127.0.0.1:9200/people/man/1/_update{ doc:{ name:chenjie_update } }删除文档DELETE 127.0.0.1:9200/people/man/1批量操作批量操作 bulk支持在一次 API 调用中对不同的索引进行操作支持四种类型操作Index/Create/Update/Delete可以在 URI 中指定 Index也可以在请求的 Payload 中进行单条操作失败并不会影响其他操作返回结果包括了每一条操作执行的结果测试命令POST _bulk { index : { _index : test, _id : 1 } } { field1 : value1 } { delete : { _index : test, _id : 2 } } { create : { _index : test2, _id : 3 } } { field1 : value3 } { update : {_id : 1, _index : test} } { doc : {field2 : value2} }使用PHPAPi构建和查询创建表和测试数据索引相当于MySQL中的表文档相当于 MySQL 中的行记录。程序在新增/修改/删除记录的时候调用ES的接口对ES文档进行同步的新增/修改/删除操作。同步构建有很大缺陷。比如ES宕机或者ES处理文档消耗了很长的时间影响用户的体验。可以使用KaFka中间件来进行异步构建文档。在 composer.json 文件中引入 elasticsearch-php{ require: { elasticsearch/elasticsearch: ~6.0 } }CREATE TABLE articles ( id INT NOT NULL PRIMARY KEY auto_increment, title VARCHAR ( 200 ) NOT NULL COMMENT 标题, content text COMMENT 内容 ); INSERT INTO articles ( title, content ) VALUES ( Laravel 测试1, Laravel 测试文章内容1 ), ( Laravel 测试2, Laravel 测试文章内容2 ), ( Laravel 测试3, Laravel 测试文章内容3 );实例化require ./vendor/autoload.php; use Elasticsearch\ClientBuilder; $client ClientBuilder::create()-build();elasticsearch的动态性质在添加第一个文档的时候自动创建了索引和一些默认设置。创建索引$params[index] articles_index; $params[body][settings][number_of_shards] 2; $params[body][settings][number_of_replicas] 0; $client-indices()-create($params);将文档加入索引foreach ($lists as $row) { $params [ body [ id $row[id], title $row[title], content $row[content] ], id article_ . $row[id], //maping db id index articles_index, type articles_type ]; $client-index($params); }从索引中获取文档$params [index articles_index, type articles_type, id articles_1]; $res $client-get($params); print_r($res);删除索引$params [ index articles_index ]; $res $client-indices()-delete($params); print_r($res);搜索文档,如果需要获取更多明细信息可以根据mysql表ID获取?php $params [index articles_index, type articles_type]; $params[body][query][match][content] Laravel; $params[body][size] 10; $params[body][from] 200; $params[body][sort] [content [order desc]]; $res $client-search($params); print_r($res); //相当于sql语句select * from articles where contentLaravel limit 200,10 order by content desc;从索引中删除文档$params [index articles_index, type articles_type, id articles_1]; $res $client-delete($params); print_r($res);Elasticsearch更新和删除文档的过程。删除和更新也都是写操作但是Elasticsearch中的文档是不可变的因此不能被删除或者改动以展示其变更磁盘上的每个段都有一个相应的.del文件。当删除请求发送后文档并没有真的被删除而是在.del文件中被标记为删除。该文档依然能匹配查询但是会在结果中被过滤掉。当段合并时在.del文件中被标记为删除的文档将不会被写入新段。在新的文档被创建时Elasticsearch会为该文档指定一个版本号当执行更新时旧版本的文档在.del文件中被标记为删除新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询但是会在结果中被过滤掉。ElasticSearch搜索term和terms的区别在查询的字段只有一个值的时候应该使用term而不是terms在查询字段包含多个的时候才使用terms(类似于sql中的in、or)使用terms语法JSON中必须包含数组。第一种(单个值,term){ query:{ bool:{ must:[ { range:{ update_time:{ gt:1488556800000 } } }, { term:{ lang:1 } }, { terms:{ domain:[ dailymasala.co, goldenmob.com ] } }, { prefix:{ user_id:errVideo_setInterval_ } } ] } }, from:0, size:10 }第二种(数组形式,terms){ query: { bool: { must: [ { range: { update_time: { gt: 1488556800000 } } }, { terms: { lang: [1] } }, { terms: { domain: [ dailymasala.co, goldenmob.com ] } }, { prefix: { user_id: errVideo_setInterval_ } } ] } }, from: 0, size: 10 }elasticsearch 中term与match区别term是代表完全匹配也就是精确查询搜索前不会再对搜索词进行分词所以我们的搜索词必须是文档分词集合中的一个。比如说我们要找标题为北京奥运的所有文档match查询会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配因此相比于term的精确搜索match是分词匹配搜索。要搜索词的分词集合中的一个或多个存在于文档中即可例如当我们搜索中国杭州搜索词会先分词为中国和杭州,只要文档中包含搜索和杭州任意一个词都会被搜索到。对于match搜索可以按照分词后的分词集合的or或者and进行匹配默认为orcurl -XGET http://localhost:9200/index/doc/_search?pretty -d { query: { match: { content: { query: 中国世界, operator: and } } } }ES性能优化{ settings:{ number_of_shards: 3, number_of_replicas: 1, index.store.type: niofs, index.query.default_field: content, index.unassigned.node_left.delayed_timeout: 5m, }, mappings:{ man:{ dynamic:true, _all:{enabled:false}, properties:{ } } } }安全控制可以使用apache/nginx的http认证在 Elasticsearch 中写入和打开一个新段的轻量的过程叫做refresh。 默认情况下每个分片会每秒自动刷新一次。这就是为什么我们说 Elasticsearch 是近实时搜索: 文档的变化并不是立即对搜索可见但会在一秒之内变为可见.更新延迟问题:搜索时加上?refreshwait_for表示如果1秒内有请求立即更新并可见。

相关新闻

MAA自动公招终极指南:如何轻松实现《明日方舟》公开招募自动化

MAA自动公招终极指南:如何轻松实现《明日方舟》公开招募自动化

MAA自动公招终极指南:如何轻松实现《明日方舟》公开招募自动化 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: htt…

2026/7/24 17:37:23 阅读更多 →
YOLOv8在管道泄漏检测中的应用与优化策略

YOLOv8在管道泄漏检测中的应用与优化策略

1. 项目概述:YOLOv8在管道泄漏检测中的核心价值 管道泄漏检测一直是工业设施维护中的关键挑战。传统人工巡检方式效率低下且容易遗漏微小泄漏点,而基于计算机视觉的自动化检测系统能实现724小时不间断监控。YOLOv8作为当前最先进的目标检测算法之一&…

2026/7/24 17:36:23 阅读更多 →
AI驱动多语言SEO优化:语义地图与本地化实践

AI驱动多语言SEO优化:语义地图与本地化实践

1. 多语言社区SEO的痛点与机遇 当运营一个面向多族裔用户的社区平台时,传统SEO策略往往会遇到"水土不服"的问题。我曾负责过一个支持12种语言的职业社交平台优化项目,发现西班牙语用户搜索"trabajo remoto"(远程工作&…

2026/7/24 17:36:23 阅读更多 →

最新新闻

全球无标记运动捕捉技术发展状况分析及投资前景展望报告2026年版

全球无标记运动捕捉技术发展状况分析及投资前景展望报告2026年版

全球无标记运动捕捉技术发展状况分析及投资前景展望报告2026年版无标记运动捕捉技术市场概述在影视娱乐数字内容创作需求爆发、体育科学训练精准化升级以及医疗康复智能化转型的多重驱动下,无标记运动捕捉技术市场正经历从“传统标记式捕捉”向“人工智能驱动的无感…

2026/7/24 17:53:29 阅读更多 →
高速ADC设计实战:时钟、SYSREF同步与DDC配置全解析

高速ADC设计实战:时钟、SYSREF同步与DDC配置全解析

1. 项目概述与核心价值在5G基站、相控阵雷达或者高端测试测量设备里,高速ADC(模数转换器)的角色,就像是一个站在最前线的“侦察兵”。它的任务是把天线捕捉到的、瞬息万变的模拟信号(比如微弱的雷达回波或者复杂的通信…

2026/7/24 17:53:29 阅读更多 →
技术落地复盘:智能锁人证核验+远程授权,破解网约房民宿安全与运维难题

技术落地复盘:智能锁人证核验+远程授权,破解网约房民宿安全与运维难题

0 摘要 随着国内文旅监管体系持续完善,网约房、分散式民宿行业正式进入强实名、强合规、轻量化、无人化的精细化发展阶段。公安部门“实名、实人、实证、实时”四实登记制度,成为行业经营的刚性准入标准。区别于传统集中式酒店,分散式短租房源…

2026/7/24 17:53:29 阅读更多 →
FastAPI的基础了解和简单入门《五》求职者登录全套实战(双 Token JWT + Vue3 Element Plus 前端 + OSS 配置)

FastAPI的基础了解和简单入门《五》求职者登录全套实战(双 Token JWT + Vue3 Element Plus 前端 + OSS 配置)

一、项目概述1. 需求分析(求职者登录模块)三种登录方式:账号密码登录、手机号 短信验证码登录、钉钉第三方登录(未绑定手机号则跳转绑定页)配套能力:用户注册、获取当前登录人信息接口认证方案&#xff1a…

2026/7/24 17:53:29 阅读更多 →
AI行业竞争中的商业伦理与技术实践探讨

AI行业竞争中的商业伦理与技术实践探讨

1. 行业竞争中的商业伦理边界探讨最近科技圈一则关于某AI公司商业行为的讨论引起了我的注意。作为从业十余年的技术人,我始终认为行业健康发展需要建立在良性竞争基础上。今天想从第三方视角,客观分析企业竞争中那些值得警惕的商业手段。2. 争议事件的技…

2026/7/24 17:53:29 阅读更多 →
百度网盘下载速度突然很慢怎么回事?2026还有解除限制的方法吗

百度网盘下载速度突然很慢怎么回事?2026还有解除限制的方法吗

不少人可能会遇到这样的困扰:在日常日常使用网络存储服务时,原本几兆甚至几十兆每秒的传输速度,忽然降到了几十KB,或者出现速度忽高忽低、频繁波动的状况。这种现象通常由多重因素共同作用产生,下面梳理了常见的原因及…

2026/7/24 17:52:29 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻