Elasticsearch 全文检索 es 搜索

Elasticsearch
Elasticsearch就是一个基于Lucene封装的web服务,实现了索引的CRUD功能,并对外提供了可 以访问的Rest风格的接口。
Elasticsearch:具备以下特点
1、 分布式 无需人工搭建集群(solr需要人为配置,使用Zookeeper作为注册中心)
2、 Restful风格,一切API都遵循Rest原则,容易上手
3、 近实时搜索,数据更新在Elasticsearch中几乎是完全同步的
启动失败可以修改jvm.options文件 -Xms256m 默认的是1G 还不行改128m
9300: 集群节点间通讯接口,接受TCP协议
9200:客户端访问接口, 接受Http协议
Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能, 生成各种图表,如柱形图,线状图,饼图等。Kibana监听端口是5601
Ik分词器:把解压后的ikwenjian拷贝到elasticserash的plugins下变重命名为ik, 重新启动ElasticSearch,即可加载IK分词器
索引库操作:
索引库(indices)---------------------------------Database 数据库
类型(type)----------------------------------Table 数据表
文档(Document)--------------------------Row 行
字段(Field)---------------------Columns 列
text:可分词,不可参与聚合
keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
基本查询:
查询类型:match_all match term range
查询所有match_all: GET /heima/_search { “query”:{ //代表查询对象
“match_all”: {} } }//查询所有
匹配查询:“match”:{ “title”:“小米电视” }是or关系
And关系 “title”:{“query”:“小米电视”,“operator”:“and”}
词条匹配(term): term 查询被用于精确值 匹配
“term”:{ “price”:2699.00 }
布尔组合(bool)
bool 把各种其它查询通过 must (与)、 must_not (非)、 should (或)的方式进行组合

 "bool":{         
   "must":     { "match": { "title": "大米" }},         
   "must_not": { "match": { "title":  "电视" }},         //查询的是大米手机
   "should":   { "match": { "title": "手机" }}        }

范围查询(range) gt > gte>= lt< lte<=

"range": {  
 "price": {           
     "gte":  1000.0,       
         "lt":   2800.00     
       }        }

模糊查询(fuzzy)

 "fuzzy": {      "title": "appla"    }//偏差度为2。
 "title": {            "value":"appla",            "fuzziness":1        }//偏差度改为1

结果过滤
直接指定字段

 GET /heima/_search {
  "_source": ["title","price"],  
"query": {   
 "term": {     
 "price": 2699   
 } 
 } }

includes:来指定想要显示的字段 excludes:来指定不想要显示的字段
“_source”: { “includes”:[“title”,“price”] },
过滤(filter)
“filter”:{ “range”:{“price”:{“gt”:2000.00,“lt”:3800.00}} }
排序
单子段排序

"sort": [  
  {   
     "price": {  
           "order": "desc"
                 }    }  ]

多字段排序
“sort”: [ { “price”: { “order”: “desc” }}, { “_score”: { “order”: “desc” }}//相关性得分排序 ]
分页from:开始位置 size:每页大小
高亮

 "highlight": { 
  "pre_tags": "<em>",   
  "post_tags": "</em>", 
    "fields": { 
         "title": {} 
            }  }

聚合aggregations
聚合aggregations max min avg sum count
桶:相当于是group by
度量:相当于聚合函数获取的结果
Term聚合 获取每个品牌的手机数量

GET heima/goods/_search
{
   "size": 0, 
   "aggs": {
     "brand_count": {
       "terms": {
         "field": "brand",
         "size": 10
       }
     }
   }
}

桶内聚合:
上面已经获取了每个品牌的数量,根据上面的结果继续获取每个手机品牌的平均价格

	GET heima/goods/_search
	{
	   "size": 0, 
	   "aggs": {
	     "brand_count": {
	       "terms": {
	         "field": "brand",
	         "size": 10
	       },
	       "aggs": {
	         "avg_price": {
	           "avg": {
	             "field": "price"
	           }
	         }
	       }
	     }
	   }
	}

集群:
高可用集群:两者共享资源,互为主从,处理业务也基本一致,若发生故障服务和资源 会转移到
负载均衡集群:,集群中的每一台计算机都来完成相同业务,不分主次。当用户请求到达时, 通过某种算法,让请求均衡的分发到集群中的每个节点,充分利用每个节点的资源。
科学计算集群(分布式处理):把复杂任务拆分成一个个小的子任务,然后分配到集群中的不同节点上完成,最后再把计算结果汇总。
分布式架构:按照上面的分布式集群概念,集群中的每个节点完成不同业务。在web开发中也是如此,我们把完整系 统进行拆分,形成独立系统,然后部署到不同的tomcat节点,不同节点通过网络通信,相互协作,这样就将复杂系统细分,但是却带来了另一个问题,就是单个节点故障会导致整个系统不完整。
高可用分布式集群架构:为分布式系统中的每个节点都部署负载均衡节点,即:每 个业务系统都有一个负载均衡的小集群。
Elasticsearch集群
node-01:http端口9201,TCP端口9301
node-02:http端口9202,TCP端口9302
node-03:http端口9203,TCP端口9303
单点的elasticsearch存在哪些可能出现的问题呢?
单台机器存储容量有限
单服务器容易出现单点故障,无法实现高可用
单服务的并发处理能力有限
为了应对这些问题,我们需要对elasticsearch搭建集群
我们可以把数据拆分成多份,每一份存储到不同机器节点(node),从而实现减少每个节点数 据量的目的。这就是数据的分布式存储,也叫做: 数据分片(Shard)
每个分片数据进行备,存储到其它节点,防止数据丢失,这就是数据备份,也叫数据副本
SpringDataElasticsearch: 简称SDE

org.springframework.boot
spring-boot-starter-data-elasticsearch

底层是TransportClient 采用TCP端口 9300
Kibana:http 9200
原生API:tcp 9300
Rest API :http 9200
SDE : 封装的是原生api tcp 9300

SpringBoot已经帮我们配置好了各种SDE配置,并且注册了一个ElasticsearchTemplate供我们 使用
在实体类上用到的注解:
@Document:声明索引库配置
indexName:索引库名称
type:类型名称,默认是“docs”
shards:分片数量,默认5
replicas:副本数量,默认1
@Id:声明实体类的id
@Field:声明字段属性
type:字段的数据类型
analyzer:指定分词器类型
index:是否创建索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值