Elasticsearch 搜索引擎(1
发布时间:2026/11/6 1:11:01 锦皓数字建站

Elasticsearch 搜索引擎简介Elasticsearch是一个基于Lucene的搜索服务器。Lucene 还是一个库必须要懂一点搜索引擎原理的人才能用的好所以后来又有人基于 Lucene 进行封装写出了 Elasticsearch。它提供了一个分布式多用户能力的全文搜索引擎基于RESTful web接口。Elasticsearch是用Java语言开发的并作为Apache许可条款下的开放源码发布是一种流行的企业级搜索引擎。安装简单开箱即用使用时直接解压即可可以实时与数据库进行更新Elasticsearch用于云计算中能够达到实时搜索稳定可靠快速安装使用方便。使用简单内部集成了很多的 http请求启动后直接调用即可实现功能。且支持大量的语言JavaC#phppython…官方网址Git hub总结elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器支持开箱即用。elasticsearch隐藏了Lucene的复杂性对外提供Restful 接口来操作索引、搜索。突出优点扩展性好可部署上百台服务器集群处理PB级数据。大数据Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB近实时的去索引数据、搜索数据。更新实时数据处理很快至少比 solr搜索引擎快可通过自定义插件如 COS 备份、QQ分词、ik分词器…等满足特定功能需求。结构 / 原理 elasticsearch 的原理就很像是一个数据库搜索引擎可以存储数据分析数据查询…elasticaSearch 对于查询效率存储数据集群都是优于数据库的但它没有数据库的强大 sql能力:存储过程….索引结构ElasticaSearch中有几个专业的名词索引类型文档ElasticSearch中的索引索引与数据库的索引概念不同它更像是数据库的库Elasticsearch中索引有两种解释物理概念黑色逻辑概念橙色物理概念索引文件 ElasticSearch 的数据存储文件 , 相当于数据库的 sql 文件逻辑概念index索引是一个倒排索引表分词列表将Docment 数据进行倒排索引产生不重复的组成分词列表。相当于一个搜索的关键词列表…百度搜索并不是 模糊查询 而是关键字查询当你百度搜素为什么经常掉头发并不会针对是根据这个问题给你进行查找而是可是能掉发… 经常掉发等关键词…Document 文档每一个 docment相当于一条数据一个文档里面有 field1 相当于一个个的属性…Document 使用 JSON 格式表示为了便于大家理解ES里的数据模型将它与关系型数据库 MySQL 做类比关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)Elasticsearch ⇒ 索引(Index) ⇒ 类型(type7.0即将淘汰) ⇒ 文档(Docments) ⇒ 字段(Fields)一个 Elasticsearch 集群可以包含多个索引(数据库)也就是说其中包含了很多类型(表)。6.0及之后移除了一个索引允许映射多个类型的操作索引就有点像一个表了…这些类型中包含了很多的文档(行)然后每个文档中又包含了很多的字段(列)。Elasticsearch的交互可以使用Java API也可以直接使用HTTP的Restful API方式原理ElasticSearch 创建一个index索引库/表(版本不同概念会有变化)创建Docment文档一条记录每次在给文档添加Docment, 都会将数据进行倒排索引对文档其中的关键字生成并生成/存储分词列表比如百度搜索一个问题云顶S1最强阵容组合 装备合成会根据分词器处理云顶S1装备阵容...等关键词。之后就会去根据每个 Document 的分词列表进行匹配…匹配度高的就优先展示给用户查看咯~倒排索引倒排索引(Inverted Index)倒排索引它也是索引。索引初衷都是为了快速检索到你要的数据。倒排索引是实现“单词-文档矩阵”的一种具体存储形式通过倒排索引可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成“单词词典”和“倒排文件”。书本的目录 和新华字典的 拼音搜词目录和索引页其实就很形象的可以比喻为正排索引和倒排索引。为了进一步加深理解再看看熟悉的搜索引擎。没有搜索引擎时我们只能直接输入一个网址然后获取网站内容这时我们的行为是地址 找 内容。此谓「正向索引」。通过搜索框来找网站时候通过内容 找 地址百度搜索直接问问题,而不是找链接..此谓「倒排索引」。倒排索引的核心组成当程序向搜索引擎中添加一条文档时候会通过一种分词算法将文档数据进行拆分并记录文档中拆分的单词组成一个单词表并生成一个对应的倒排列表这都可以在文件中查看的…添加的数据和生成的单词表单词表精确记录了一个单词所拥有的一个文档 id;单词表 和 倒排列表单词词典记录所有文档的单词一般都比较大。还会记录单词到倒排列表的关联信息。倒排列表记录了单词对应的文档集合由倒排索引项组成。倒排索引项包含如下信息文档ID用于获取原始信息单词频率TF记录该单词在该文档中的出现次数用于后续相关性算分分越高用户最先看到位置Position记录单词在文档中分词的位置用于语句搜索(phrase query)偏移Offset记录单词在文档的开始和结束位置实现高亮显示通常在前面加 JS 使其输出页面直接: 高亮显示倒排索引的实现当用户通过搜索引擎去搜索一段话S1云顶之一最强阵容当然浏览器并不会直接通过S1云顶之一最强阵容去进行查找对吧。你百度时候的会出现一模一样的标题吗搜索引擎会对搜索的数据进行拆分很多关键字S1云顶最强阵容...倒排索引进行查找展示另外中文分词还是比较复杂的不像英文分词一般用空格分隔就可以。可以通过IK 分词器解决ElasticSearch安装Windows 安装非常简单开箱即用linux可以参考ELK实现日志收集器解压注意安装解压在一个没有 空格和中文 的英文目录下bin: 脚本目录包括启动、停止等可执行脚本启动脚本elasticsearch.batconfig: 配置文件目录data: 索引目录存放索引文件的地方logs日志目录modules模块目录包括了es的功能模块 内置模块plugins: 插件目录es支持插件机制 :中文分词…等插件查看配置elasticsearch.ymlcluster.name: wf#配置elasticsearch的集群名称默认是elasticsearch。建议修改成一个有意义的名称。node.name: xc_node_1#节点名通常一台物理服务器就是一个节点network.host:0.0.0.0#设置绑定主机的ip地址设置为0.0.0.0表示绑定任何ip允许外网访问http.port:9200#端口transport.tcp.port:9300#集群结点之间通信端口node.mastenode.master:true#集群中的主节点默认是true,如果原来的master宕机会重新选举新的master.node.data:true#指定该节点是否存储索引数据默认为true.discovery.zen.ping.unicast.hosts:[0.0.0.0:9300]#设置集群中master节点的初始列表,多个就逗号隔开配置[0.0.0.0:9300,0.0.0.0:9200]discovery.zen.minimum_master_nodes:1#主结点数量的最少值 ,此值的公式为node.ingest:true#为了在 indexing索引之前预处理 documents文档。bootstrap.memory_lock:false#设置为true可以锁住ES使用的内存避免内存与swap分区交换数据。node.max_local_storage_nodes:2#单机允许的最大存储结点数通常单机启动一个结点建议设置为1#discovery.zen.ping.timeout: 3s #设置ES自动发现节点连接超时的时间默认为3秒如果网络延迟高可设置大些。path.data: D:\WSMwork\elasticsearch\elasticsearch\data#设置插件的存放路径默认是es根目录下的plugins文件夹path.logs: D:\WSMwork\elasticsearch\elasticsearch\logs#设置日志文件的存储路径默认是es根目录下的logs文件夹http.cors.enabled:true#启动跨域支持http.cors.allow-origin: /.*/#支持各种语言的 origin 跨域, 直接使用内置接口完成开发集群只是一个概念其实一台服务器也可以称为集群只有一个elasticsearch的集群环境!jvm.options无论是 linux 还是 windows 开启时要指定提供运行的内存…当然可以直接给一个默认值在jvm.options中设置 -Xms和-Xmx两个值设置为相等将 Xmx 设置为不超过物理内存的一半。log4j2.properties日志文件设置注意日志级别的配置。启动进入bin目录在cmd下运行elasticsearch.bat浏览器输入http://localhost:9200启动页面也展示着一些信息lucene_version的版本...ES快速入门ES作为一个索引及搜索服务对外提供丰富的REST接口因此对于JS 等工程即使没有集成只要可以发起请求直接接口调用也可以完成, 开发创建索引相当于数据库的 库关于索引这个语索引两个意思 一个文件 一个查找方式索引名词ES是基于Lucene构建的一个搜索服务它要从索引库搜索符合条件索引数据。索引动词索引库刚创建起来是空的将数据添加到索引库的过程称为索引。创建索引库putput请求http://localhost:9200/索引库名称可选参数设置JSON格式{settings:{index:{number_of_shards:1,//分片个数number_of_replicas:0//备份个数}}}number_of_shards分片对于一个大量的数据进行切分在多台服务器中存放… 不适合单击应用设置分片的数量在集群中通常设置多个分片表示一个索引库将拆分成多片分别存储不同的结点提高了ES的处理能力和高可用性入门程序使用单机环境这里设置为1默认为5number_of_replicas备份,创建两个库存储相同的数据..设置副本的数量设置副本是为了提高ES的高可靠性本次单机环境设置为0默认值为1查看索引库get创建好了直接 get 相同的地址 就是查看了! , 返回JSON 可以查看信息测试创建映射相当于一个 表/_mapping注意6.0之前的版本有type类型表名概念type相当于关系数据库的表ES官方将在8.0版本中彻底删除type。暂时把type起一个没有特殊意义的名字.上边讲的创建索引库相当于关系数据库中的数据库还是表如果相当于数据库就表示一个索引库可以创建很多不同类型的文档这在ES中也是允许的。如果相当于表就表示一个索引库只能存储相同类型的文档ES官方建议在一个索引库中只存储相同类型的文档。创建映射putput请求post http://localhost:9200/索引库名称/映射名称(类型,表)/_mapping必须 /_mapping 结尾JSON 属性参数‘表’ 属性设置JSON方式定义{//properties固定的配置规则properties:{//自定义的列fieid,及类型设置text keyword...后面详细介绍name:{type:text},description:{type:text},studymodel:{type:keyword}}}查看映射getGet请求http://localhost:9200/索引库名称测试创建文档相当于给表添加数据创建文档post 或 putpost 或 put 请求http://localhost:9200/索引名/映射名/id值传入JSON 参数形式赋值生成一个Document如果不指定id值ES会自动生成一个唯一ID根据上面的JSON 模拟一个测试JSON{name:Bootstrap开发框架,description:Bootstrap是由Twitter推出的一个前台页面开发框架在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码可以帮助开发者尤其是不擅长页面开发的程序人员轻松的实现一个不受浏览器限制的 精美界面效果。,studymodel:201001}查询数据getGet请求http://localhost:9200/索引名/映射名/id值或http://localhost:9200/索引名/映射名/_search查询所有数据及属性信息搜索文档查询名称中包括spring 关键字的的记录,还记得上面属性类型 text keywordtext支持拆分关键词查询http://localhost:9200/wsm/w1/_search?qname:bootstrap将数据拆分为一组关键词进行查看~查询学习模式为 201001 的记录http://localhost:9200/wsm/w1/_search?qstudymodel:201001可以发现studymodel 并不支持关键词拆分查询…测试took本次操作花费的时间单位为毫秒。timed_out请求是否超时_shards说明本次操作共搜索了哪些分片hits搜索命中的记录hits.total 符合条件的文档总数 hits.hits 匹配度较高的前N个文档hits.max_score文档匹配得分这里为最高分_score每个文档都有一个匹配度得分按照降序排列。_source显示了文档的原始内容。分词器/_analyze注意:一般只有映射的 text 类型, 才可以使用, 分词器.即:表的列类型必须是 text 才可以使用分词器keyword 不支持使用;测试分词器每次新增数据时候底层就会默认执行了….在添加文档时会进行分词索引中存放的就是一个一个的词term,当你去搜索时就是拿关键字去匹配词最终找到词关联的文档。测试当前索引库使用的分词器postpost 发送localhost:9200/_analyzetext 类型才可以进行分词而且这里这是测一段字符数据进行分词器分词测试数据{text:中华人民共和国财政部}因为 elasticsearch 是老外写的对中文的分词难免会有不同所以出现了IK分词器插件elasticsearch plugins: 插件目录 ,允许集成外部的插件来完成快速的开发IK 分词器测试post安装IK分词器插件点击post请求没什么变化localhost:9200/_analyze但是对于JSON 的测试参数后面需要加一段属性配置analyzer:ik_max_wordik 分词器的规则直接运行测试就直接发现结果数据更符合咱中国人的感觉analyzer 两种分词模式ik分词器有两种分词模式ik_max_word和ik_smart模式ik_max_word精确拆分最细粒度的拆分比如会将中华人民共和国人民大会堂”拆分为中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。但这种结果对于搜索引擎并不好结果多细致但不能连贯很难查询到准确的数据ik_smart粗略拆分最粗粒度的拆分比如会将中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。相对来说这样差分的不多搜索引擎查看的时候可以更加精确的指定数据IK 自定义词库如果要让分词器支持一些专有词语可以自定义词库。对于一些网络热点词汇吃鸡 云顶…ik 分词器中可能并不会有分词器进行区分… 所以可以支持自定义分词.Ik 插件安装目录下config/main.dic 文件夹:可以看到 main.dic文件中包含了很多常用的关键词这就是一个Ik的词库映射 常见的映射类型:映射维护方法:表的 CURD 操作CURD:数据库技术中的缩写词: Create创建 Update修改 Retrieve查看 Delete删除创建映射post一个索引只能有, 不多于一个映射!post 请求:http://localhost:9200/索引/映射/_mappingJSON 参数设置, 字段;更新映射post / putpost put 皆可:http://localhost:9200/索引/映射/_mapping就是正常的, 创建到的请求,把要更新新增的 列直接加入JSON即可但已有字段不允许更新。如果要强行更改JSON 运行了,它并不会 包错/移除… 而是直接增加一个你修改的字段, 原字段不受影响!查询所有索引的映射getGET请求:http://localhost:9200/_mapping查询所有的索引映射可以指定索引查看所有映射:http://localhost:9200/索引/_mapping或查看指定索引/指定映射/_mapping:http://localhost:9200/索引/映射/_mapping删除映射deleteDelete 请求:http://localhost:9200/索引常用映射类型字符串字符串包括text和keyword两种类型数字byte、short、integer、long、float、double、时间date布尔值boolean: true、false数组: array二进制: binarytext文本字段text 可以通过analyzer属性指定分词器 详解通过index属性指定是否索引。默认为indextrue即要进行索引只有进行索引才可以从索引库搜索到。但是也有一些内容不需要索引比如:商品图片地址列只被用来展示图片不进行搜索图片拆分关键词…此时可以将index设置为false设置映射属性{properties:{Field字段/列:{type:text,index:false}}}测试:重新创建: 索引/映射/文档,文档设置 indexfalse在次指定查看是否可以获取到数据!index false 的列, 不难参与查询,不到数据!keyword关键字字段keyword字段为关键字字段通常搜索keyword是按照整体搜索所以创建keyword字段的索引时是不进行分词的比如邮政编码、手机号码、身份证等。keyword字段通常用于过虑、排序、聚合等。查询方式是精确查询。查询条件必须和值一样!测试需要精确的进行, 值的绑定查询!date日期类型日期类型不用设置分词器通常日期类型的字段用于排序。通过format设置日期格式下边的设置允许date字段存储年月日时分秒、年月日及毫秒三种格式。{properties:{Field字段/列:{type:date,format:yyyy-MM-dd HH:mm:ss||yyyy-MM-dd}}}数值类型尽量选择范围小的类型提高搜索效率,减轻内存消耗对于浮点数尽量用比例因子:浮点类型的数据于整型类型数据相比会比较大占用空间毕竟它比整型多小数!所以比例因子会进行四舍五入把浮点的数据变为整数方便操作节省空间内存数据优化使用比例因子: 100{properties:{Field字段/列:{type:scaled_float,scaling_factor:100}}}如果我们输入的价格是23.45则ES中会将23.45乘以100存储在ES中。如果输入的价格是23.456ES会将23.456乘以100再取一个接近原始值的数四舍五入得出2346。 使用比例因子的好处是整型比浮点型更易压缩节省磁盘空间。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。