ES 全称为:ElasticSearch,是一个分布式,高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。
可以用来做日志分析系统,或者是搜索方面的系统功能;
ES与MySQL的区别吧(其实概念上挺像的,但是也仅仅只限于概念吧!!!只是个人理解吧)
ES MySQL
字段 列
文档 一行数据
类型(已被遗弃) 表
索引 数据库
使用之前需要先掌握RESTful 的四个关键词:PUT(修改),POST(添加),DELETE(删除),GET(查询),
但是在ES里面PUT和POST的界限并不是很分明,有时候PUT也作为添加。
get查询返回的内容解释:
took:耗费了几毫秒
timed_out:是否超时
_shards:数据拆成5个分片,对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以),所以total和successful会是5;
hits:查询的所有结果
hits里面的 total:查询结果的数量(多少个 document)
max_score:score的含义就是document对于一个search的相关度的匹配分数,越相关、就越匹配,分数也越高;
hits.hits(hits里面包含了hits):包含了匹配搜索的document的详细数据-----里面的hits包含的是和每个文档相关的数据,外面的hits有的数据是统计数据,如total等--------一般都有两个hits嵌套;
_index:该文档所属的index
_type:该文档所属的type
_id:该文档的id
_source:具体的内容,即存储的json串
数据CRUD
插入数据:可以指定Id,也可以不指定;
修改数据:ES里的文档是不可以修改的,但可以被覆盖,所以ES的修改也叫做文档的覆盖, 对数据的修改又分为全局更新和局部更新。
ES分词:首先是默认的分词器Standard,如果是查一些英文的词汇的时候·,其实也挺够用的, 但是如果我们是用来查中文词汇的话就可以发现中文就很奈斯的了,,,
分得很不尽人意了。
ik_smart:会将文本做最粗粒度的拆分 ,
ik_max_word :会将文本做最细粒度的拆分
拆分是拆分完了,但有时拆分过后的结果也和我们所想象当中的词语有所差别吧,而发生这种情况的话,就需要我们自己手动去定义IK词库中的词语了。
ES评分机制:按照文档与查询的相关度(匹配度)的得分倒序返回结果的. 得分 (_score) 就越大, 表示相关性越高.
词频:就是词在文档中出现的频度是多少?频度越高,权重越高。
text和keyword类型的区别:
text:默认进行分词,text类型的数据被用来索引长文本,例如电子邮件主体部分或者一款产品的介绍,这些文本会被分析,在建立索引文档之前会被分词器进行分词,转化为词组。经过分词机制之后es允许检索到该文本切分而成的词语,但是text类型的数据不能用来过滤、排序和聚合等操作。
keyword:默认不分词的文本数据类型,可以满足电子邮箱地址、主机名、状态码、邮政编码和标签等数据的要求,不进行分词,常常被用来过滤、排序和聚合。