Elasticsearch搜索资料汇总
Elasticsearch 简介
Elasticsearch(ES)是一个基于Lucene
构建的开源分布式搜索分析引擎,可以近实时的索引、检索数据。具备高可靠、易使用、社区活跃等特点,在全文检索、日志分析、监控分析等场景具有广泛应用。
lucene
Elasticsearch 中文社区:https://elasticsearch.cn/article/
Elasticsearch 官方文档:https://www.elastic.co/guide/index.html
Elasticsearch 各客户端API(eg:.NET、JAVA、Python、Go)
Elasticsearch .net client NEST 5.x 使用总结(初始化、查询、权重、排序、聚合等)
Elasticsearch 客户端SDK使用建议:创建索引的Setting和mapping使用elasticsearch 提供的DSL语法更加简单。因为客户端API代码里面只提供基础的SDK,如(ik拼音等)插件就没有对应接口提供
Elasticsearch术语(索引、类型、文档、集群、节点、分片)
ES数据架构的主要概念(与关系数据库Mysql对比)

在ES
早期版本,一个索引下是可以有多个Type
,从7.0
开始,一个索引只有一个Type,即_doc。一个Type 下的文档,都有相同的字段(Field)
安装
ELK
ELK 是elastic 公司旗下三款产品ElasticSearch
、Logstash 、Kibana 的首字母组合。
#、ElasticSearch 是一个基于Lucene
构建的开源,分布式,RESTful
搜索引擎。
#、Logstash 传输和处理你的日志、事务或其他数据。
#、Kibana 将Elasticsearch
的数据分析并渲染为可视化的报表。
分词器
分词器是专门处理分词的组件,分词器由如下三部分组成:
1、Character Filters:针对原始文本处理,比如:去除html 标签
2、Tokenizer:按照规则切分为单词,比如:按照空格切分
3、Token Filters:将切分的单词进行加工,比如:大写转小写,删除stopwords,拼音,同义词等
analyzer = CharFilters(0个或多个)+
Tokenizer(一个) +
TokenFilters(0个或多个)

从图中能够看出,从上到下依次通过Character
Filters,Tokenizer
以及Token
Filters,这个顺序比较好理解,一个文本进来确定要先对文本数据进行处理,再去分词,最后对分词的结果进行过滤。
elasticSearch Analysis Token Filters作用及相关样例
ElasticSearch查看字段分词结果 (便于查为什么匹配不出的问题)
Elasticsearch7 分词器(内置分词器和自定义分词器)
Elasticsearch-Analysis-IK中文分词器配置使用
elasticsearch 之分词器配置 (IK+pinyin)
Elasticsearch 使用ik中文分词器增加分词热词(自定义词)
Elasticsearch mapping
搞懂Elasticsearch 之Mapping (Reindex)
Mapping中的store属性(按需查询字段)
Elasticsearch中的store field跟non-store field的区别
Elasticsearch 理解mapping中的store属性
Elasticsearch 动态模板(dynamic_templates)
normalizer 的使用
ElasticSearch Normalizer 的使用方法
Adding normalizer for all keyword fields NEST
Elasticsearch DLS语法
Elasticsearch 查询语法(模糊、精确、sort、相关性、and|or、slop间隔等)
Elasticsearch 查询语法(多条件bool复杂查询(must、should、filter)、日期范围查询)
Elasticsearch 查询语法(bool复杂查询、operator(||、&&、!、+))
ElasticSearch 组合多查询(bool, must, should, must_not, filter)
Elasticsearch中match、match_phrase、query_string和term的区别
相关性score
ElasticSearch 的分数(_score) 是怎么计算得出 (2.X & 5.X)
ElasticSearch 多级排序(eg:产品要根据:销量、热度、相关性排序)
Elasticsearch 搜索条件权重控制(boost)-- 默认情况下,搜索条件的权重都是1
聚合查询
Elasticsearch 聚合语法(Aggregations)
分页查询
Elasticsearch 查询语法(使用scroll响应式返回大集合文档)
Elasticsearch 高亮显示匹配关键词(Highlight)
同义词
elasticsearch 使用同义词(synonym.txt)
搜索建议词(Suggest功能)
ElasticSearch使用completion实现补全功能
Elasticsearch Suggester详解(自动补全)
elasticsearch 7.0 新特性之 search as you type
安全性
Meow攻击删除开放的的Elasticsearch(及MongoDB) 索引,建一堆以Meow结尾的奇奇怪怪的索引(如:m3egspncll-meow)----关闭外网访问端口,或至少修改ES默认端口
用nginx给kibana、elasticsearch做权限认证
集中式日志分析平台- ELK Stack - 安全解决方案 X-Pack
常用es语法
版本:Elasticsearch 7.9.0
删除索引
DELETE mall.completion
创建索引,并指定settings
PUT mall.completion
{
"settings":{
"analysis":{
"analyzer":{
"ik_smart_pinyin":{
"type":"custom",
"tokenizer":"ik_smart",
"filter":["g_pinyin","word_delimiter"]
},
"ik_max_word_pinyin":{
"type":"custom",
"tokenizer":"ik_max_word",
"filter":["g_pinyin","word_delimiter"]
}
},
"filter":{
"g_pinyin":{
"type":"pinyin",
"keep_separate_first_letter":false,
"keep_full_pinyin":true,
"keep_original":true,
"limit_first_letter_length":16,
"lowercase":true,
"remove_duplicated_term":true
}
}
}
},
"mappings": {
"properties":
{
"kw_completion": {
"type": "completion"
},
"kw_text":{
"type": "text",
"analyzer":
"ik_smart_pinyin"
}
}
}
}
查看索引设置
GET mall.completion/_settings
查看mapping结构
GET mall.completion/_mapping
批量插入数据
POST _bulk/?refresh=true
{ "index": { "_index": "mall.completion"
}}
{ "kw_completion": "项目","kw_text": "项目"}
{ "index": { "_index": "mall.completion"
}}
{ "kw_completion": "项目进度","kw_text": "项目进度"}
{ "index": { "_index": "mall.completion"
}}
{ "kw_completion": "项目管理","kw_text": "项目管理"}
{ "index": { "_index": "mall.completion"
}}
{ "kw_completion": "项目进度及调整 汇总.doc_文档","kw_text": "项目进度及调整 汇总.doc_文档"}
{ "index": { "_index": "mall.completion"
}}
{ "kw_completion": "项目","kw_text": "项目"}
查看指定分词器对文本进行分词的结果
GET mall.completion/_analyze
{
"analyzer": "ik_smart_pinyin",
"text": "很棒的冬天暖心羽绒服"
}
根据字段的mapping,进行分词测试
GET mall.completion/_analyze
{
"field": "kw_text",
"text": "很棒的冬天暖心羽绒服"
}
查询文档
GET mall.completion/_search
{
"query": {
"match":
{
"kw_text": "项目"
}
}
}
查看文档中的分词结果
GET
mall.completion/_doc/CYlJTnUBrvWtEbASfvRa/_termvectors?fields=kw_text
使用completion获取搜索补全建议(前缀搜索)
GET mall.completion/_search
{
"suggest":
{
"my-completion": {
"prefix": "项目",
"completion": {
"field":
"kw_completion",
"size": 20,
"skip_duplicates":
true
}
}
}
}
获取搜索建议词 (xang为拼写错误,会建议为:xiang)
GET mall.completion/_search
{
"suggest": {
"my-suggestion":
{
"text": "xang",
"term": {
"suggest_mode":
"missing",
"field": "kw_text"
}
}
}
}
多字段匹配案例
GET mall.completion/_search
{
"query":{
"multi_match":
{
"query": "米",
"fields":
["name","description","brandName","labelName","menuCategoryNamePath"]
}
}
}
查询包含字段"keyword"的文档
GET mall.completion/_search
{
"query":{
"exists":
{
"field": "keyword"
}
}
}
多条件查询语法案例
must 文档 必须 匹配这些条件才能被包含进来。
must_not 文档 必须不 匹配这些条件才能被包含进来。
should 如果满足这些语句中的任意语句,将增加_score
,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
filter 必须
匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
{
"bool":
{
"must": { "match": { "title": "how to make millions" }},
"must_not": { "match": {
"tag": "spam" }},
"should": [
{ "match": { "tag": "starred"
}}
],
"filter": {
"bool": {
"must": [
{ "range": { "date": { "gte":
"2014-01-01" }}},
{
"range": { "price": { "lte": 29.99 }}}
],
"must_not": [
{ "term": { "category": "ebooks"
}}
]
}
}
}
}
其他推荐阅读
ElasticSearch 电商搜索实现(按"地里坐标"排序)
Implementing A Modern E-Commerce Search
==============================================================================
over,谢谢查阅,觉得文章对你有收获,请多帮推荐。欢迎向我提供更好的资料信息。
Elasticsearch搜索资料汇总的更多相关文章
- 机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...
- 【转】iOS超全开源框架、项目和学习资料汇总
iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...
- 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据
<Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...
- MongoDB资料汇总专题[转发]
转发下..这个哥收集的很全 MongoDB资料汇总专题 作者:nosqlfan http://blog.nosqlfan.com/html/3548.html 最后更新时间:2013-04-22 1. ...
- (zhuan) 深度学习全网最全学习资料汇总之模型介绍篇
This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058& ...
- MongoDB资料汇总专题
原文地址:http://bbs.chinaunix.net/thread-3675396-1-1.html 上一篇Redis资料汇总专题很受大家欢迎,这里将MongoDB的系列资料也进行了简单整理.希 ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)
转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...
随机推荐
- 手写Javaweb服务器
简单web服务器 回忆socket 创建客服端(在httpClient_1包下) public class Client { public static void main(String[] a ...
- Redis基础(一)数据结构与数据类型
Redis数据结构 Redis一共有六种数据结构,分别是简单动态字符串.链表.字典.跳表.整数集合.压缩列表. 简单动态字符串(SDS) Redis只会使用C字符串作为字面量,在大多数情况下,Redi ...
- 第三章 MySQL的多实例
一.MySQL服务构成 1.MySQL程序结构 1.连接层 2.sql层 3.存储引擎层 2.MySQL逻辑结构 1.库 2.表:元数据+真实数据行 3.元数据:列+其它属性(行数+占用空间大小+权限 ...
- vue 路由知识点(一级路由与二级路由嵌套)
本人小白一个,如果问题,麻烦大神指点, 一级路由: path:'/' 默认为显示; 二级路由: path: '',默认显示为index组件,因为二级路有没有写index组件,所以使用redirect: ...
- 面试官:看你简历说写精通ThreadLocal,这几道题你都会吗?
问题 和Synchronized的区别 存储在jvm的哪个区域 真的只是当前线程可见吗 会导致内存泄漏么 为什么用Entry数组而不是Entry对象 你学习的开源框架哪些用到了ThreadLocal ...
- fasd
基本排序算法 冒泡排序 没什么可说的, 改进方法就是加一个标志位防止有序后重复遍历. 由于需要遍历两次, 所以时间复杂度O(N^2) 传送门 --> 冒泡排序 选择排序 外层从0开始默认oute ...
- OGG投递进程报错无法open文件,无法正常投递
1.1现象 之前有个客户遇到一个问题,OGG同步数据链路,突然有一天网络出现问题,导致OGG投递进程无法正常投递,无法写入目标端的该文件. 猜测是由于网络丢包等原因导致文件损坏,无法正常open,re ...
- ARM的三级流水线结构
看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果.所以,决定总结学习下ARM流水线. ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/ ...
- 使用arm-none-eabi-gdb报错error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
使用arm-none-eabi-gdb报错error while loading shared libraries: libncurses.so.5: cannot open shared objec ...
- 运维告警排班太复杂?试试Cloud Alert智能告警排班
前言: 之前的几篇文章有说过,通过智能告警平台Cloud Alert,将指定条件的告警以多样化的通知方式,通知到指定的人,其中的通知的方式包含电话.短信.邮件.微信.APP.钉钉等. 本篇文章就来说下 ...