
Lucene 还是一个库,必须要懂一点搜索引擎原理的人才能用的好,所以后来又有人基于 Lucene 进行封装,写出了 Elasticsearch。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
开箱即用! 使用时直接解压即可,可以实时与数据库进行更新!
Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
启动后直接调用即可实现功能。 且支持大量的语言:Java C# php python …
总结: elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。 elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。 突出优点:
大数据Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB更新实时数据处理很快,至少比 solr搜索引擎快!elasticsearch 的原理就很像是一个数据库+搜索引擎
但它没有数据库的强大 sql能力:存储过程….索引 类型 文档
ElasticaSearch中的索引,索引与数据库的索引概念不同,它更像是数据库的库
ElasticaSearch中,索引有两种解释:物理概念黑色,逻辑概念橙色

物理概念: 索引文件 ElasticSearch 的数据存储文件 , 相当于数据库的 sql 文件! 逻辑概念:
倒排索引表百度搜索并不是 模糊查询 而是关键字查询:
当你百度搜素: 为什么经常掉头发?,并不会针对是根据这个问题给你进行查找,而是可是能:掉发… 经常掉发等关键词…Document 使用 JSON 格式表示为了便于大家理解ES里的数据模型,将它与关系型数据库 MySQL 做类比:

关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引(Index) ⇒ 类型(type
7.0即将淘汰) ⇒ 文档(Docments) ⇒ 字段(Fields)
6.0及之后移除了一个索引允许映射多个类型的操作, 索引就有点像一个表了…库/表 (版本不同概念会有变化),创建Docment文档一条记录
每次在给文档添加Docment, 都会将数据进行 倒排索引 对文档其中的关键字,生成并生成/存储: 分词列表云顶 S1 装备 阵容...等关键词。
之后就会去根据每个 Document 的分词列表进行匹配… 匹配度高的就优先展示给用户查看咯~倒排索引(Inverted Index):倒排索引,它也是索引。索引,初衷都是为了快速检索到你要的数据。

正排索引和倒排索引。为了进一步加深理解,再看看熟悉的搜索引擎。百度搜索直接问问题,而不是找链接.. 此谓「倒排索引」。单词表 ,并生成一个对应的倒排列表 这都可以在文件中查看的…

单词表 和 倒排列表

还会记录单词到倒排列表的关联信息。
分越高,用户最先看到!
位置Position,记录单词在文档中分词的位置,用于语句搜索(phrase query)
偏移Offset,记录单词在文档的开始和结束位置,实现高亮显示,通常在前面加 JS 使其输出页面直接: 高亮显示!
S1云顶之一最强阵容 去进行查找,对吧。你百度时候的会出现一模一样的标题吗?
S1 云顶 最强阵容... +倒排索引进行查找,展示!
另外中文分词还是比较复杂的,不像英文分词一般用空格分隔就可以。可以通过IK 分词器解决
Windows 安装非常简单,开箱即用 linux可以参考:ELK实现日志收集器
注意安装解压,在一个没有 空格和中文 的英文目录下!

elasticsearch.bat中文分词…等插件!
elasticsearch.yml
cluster.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.maste
node.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作为一个索引及搜索服务,对外提供丰富的REST接口
相当于数据库的 库关于索引这个语: 索引两个意思 一个文件 一个查找方式
putput请求 http://localhost:9200/索引库名称
可选参数设置:JSON格式
{
"settings": {
"index": {
"number_of_shards": 1, //分片个数
"number_of_replicas": 0 //备份个数
}
}
}分片
对于一个大量的数据进行切分,在多台服务器中存放… 不适合单击应用!
设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同的结点,
提高了ES的处理能力和高可用性,入门程序使用单机环境,这里设置为1 默认为5备份,创建两个库存储相同的数据..
设置副本的数量,设置副本是为了提高ES的高可靠性,本次单机环境设置为0,默认值为1get创建好了直接 get 相同的地址 就是查看了! , 返回JSON 可以查看信息!

相当于一个 表 /_mapping注意:
暂时把type起一个没有特殊意义的名字.上边讲的创建索引库相当于关系数据库中的数据库还是表?
一个索引库可以创建很多不同类型的文档,这在ES中也是允许的。一个索引库只能存储相同类型的文档,
ES官方建议,在一个索引库中只存储相同类型的文档。putput请求: post http://localhost:9200/索引库名称/映射名称(类型,表)/_mapping
’表’ 属性设置!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 模拟一个测试JSON
{
"name": "Bootstrap开发框架",
"description": "Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包 含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的 精美界面效果。",
"studymodel": "201001"
}getGet请求: http://localhost:9200/索引名/映射名/id值 或 http://localhost:9200/索引名/映射名/_search 查询所有数据!及属性信息
搜索文档
还记得上面属性类型 text keyword text支持拆分关键词查询
http://localhost:9200/wsm/w1/_search?q=name:bootstrap 将数据拆分为一组关键词进行查看~
http://localhost:9200/wsm/w1/_search?q=studymodel:201001 可以发现studymodel 并不支持关键词拆分查询…

/_analyze注意:
表的,列类型,必须是 text 才可以使用分词器 keyword 不支持使用;每次新增数据时候,底层就会默认执行了….
postpost 发送: localhost:9200/_analyze
{"text":"中华人民共和国财政部"}
postpost请求没什么变化: localhost:9200/_analyze
"analyzer":"ik_max_word" ik 分词器的规则

ik分词器有两种分词模式:ik_max_word和ik_smart模式
精确拆分
最细粒度的拆分,比如会将:中华人民共和国人民大会堂”拆分为
中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。
但这种结果对于搜索引擎并不好,结果多细致,但不能连贯,很难查询到准确的数据!
粗略拆分
最粗粒度的拆分,比如会将:中华人民共和国人民大会堂”拆分为 中华人民共和国、人民大会堂。
相对来说这样差分的不多,搜索引擎查看的时候,可以更加精确的指定数据!

表的 CURD 操作CURD:
post一个索引只能有, 不多于一个映射!
post 请求: http://localhost:9200/索引/映射/_mapping
post / putpost put 皆可: http://localhost:9200/索引/映射/_mapping
把要更新新增的 列直接加入JSON即可
如果要强行更改JSON 运行了, 它并不会 包错/移除… 而是直接增加一个你修改的字段, 原字段不受影响!
getGET请求: http://localhost:9200/_mapping
http://localhost:9200/索引/_mappinghttp://localhost:9200/索引/映射/_mappingdeleteDelete 请求: http://localhost:9200/索引
text和keyword两种类型analyzer属性指定分词器 👆👆详解
index属性指定是否索引。
默认为index=true,即要进行索引,只有进行索引才可以从索引库搜索到。
但是也有一些内容不需要索引,比如: 商品图片地址列,只被用来展示图片,不进行搜索图片,拆分关键词…
此时可以将index设置为false
设置映射,属性
{
"properties": {
"Field字段/列": {
"type": "text",
"index":false
}
}
}重新创建: 索引/映射/文档 , 文档设置 index=false 在次指定查看是否可以获取到数据!

keyword字段为关键字字段,通常搜索keyword是按照整体搜索
查询条件必须和值一样!
通过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
}
}
}接近原始值的数
四舍五入得出2346。 使用比例因子的好处是整型比浮点型更易压缩,节省磁盘空间。