谷粒商城 ElasticSearch-全文检索 学习记录

简介

https://www.elastic.co/cn/what-is/elasticsearch
全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、 Stack Overflow Github 都采用它
Elastic 的底层是开源库 Lucene 。但是,你没法直接用 Lucene ,必须自己写代码去调用它的
接口。 Elastic Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
REST API :天然的跨平台。
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方中文: https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
社区中文:
https://es.xiaoleilu.com/index.html
http://doc.codingdict.com/elasticsearch/0/

 

一,基本概念

1 Index (索引)
动词,相当于 MySQL 中的 insert
名词,相当于 MySQL 中的 Database
2 Type (类型)
Index (索引)中,可以定义一个或多个类型。
类似于 MySQL 中的 Table ;每一种类型的数据放在一起; 3 Document (文档)
保存在某个索引( Index )下,某种类型( Type )的一个数据( Document ),文档是 JSON
式的, Document 就像是 MySQL 中的某个 Table 里面的内容;
4 、倒排索引机制
 
二、 Docker 安装 Es
1 、下载镜像文件
docker pull elasticsearch:7.4.2 存储和检索数据
docker pull kibana:7.4.2
可视化检索数据
2 、创建实例
1 ElasticSearch
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/ 保证权限
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch: 7.4.2
以后再外面装好插件重启即可;
特别注意:
-e ES_JAVA_OPTS="-Xms64m -Xmx256m" \ 测试环境下,设置 ES 的初始内存和最大内存,否则导
致过大启动不了 ES
2 Kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS= http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.4.2
http://192.168.56.10:9200 一定改为自己虚拟机的地址

 

三、初步检索
1 _cat
GET /_cat/nodes:查看所有节点
GET /_cat/health:查看 es 健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引
show databases;

2 、索引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
PUT customer/external/1 ;在 customer 索引下的 external 类型下保存 1 号数据为
PUT customer/external/1
{ "name": "John Doe" }
PUT POST 都可以,
POST 新增。如果不指定 id ,会自动生成 id 。指定 id 就会修改这个数据,并新增版本号
PUT 可以新增可以修改。 PUT 必须指定 id ;由于 PUT 需要指定 id ,我们一般都用来做修改
操作,不指定 id 会报错。
3 、查询文档
GET customer/external/1 
结果: 
{ 
    "_index": "customer", //在哪个索引 
    "_type": "external", //在哪个类型 
    "_id": "1", //记录 id 
    "_version": 2, //版本号 
    "_seq_no": 1, //并发控制字段,每次更新就会+1,用来做乐观锁 
    "_primary_term": 1, //同上,主分片重新分配,如重启,就会变化 
    "found": true, 
    "_source": { //真正的内容 "name": "John Doe" } 
}
更新携带 ?if_seq_no=0&if_primary_term=1
4 、更新文档
POST customer/external/1/_update 
{ "doc":
    { "name": "John Doew" } 
}
或者
POST customer/external/1 
{ "name": "John Doe2" }
或者
PUT customer/external/1 
{ "name": "John Doe" }
 
不同: POST 操作会对比源文档数据,如果相同不会有什么操作,文档 version 不增加
PUT 操作总会将数据重新保存并增加 version 版本;
_update 对比元数据如果一样就不进行任何操作。
看场景;
对于大并发更新,不带 update
对于大并发查询偶尔更新,带 update ;对比更新,重新计算分配规则。
 
更新同时增加属性:
POST customer/external/1/_update 
{ "doc": 
    { "name": "Jane Doe", "age": 20 } 
}
5 、删除文档 & 索引
DELETE customer/external/1 
DELETE customer
6 bulk 批量 API
POST customer/external/_bulk 
{"index":{"_id":"1"}} 
{"name": "John Doe" } 
{"index":{"_id":"2"}} 
{"name": "Jane Doe" } 
复杂实例: 
POST /_bulk 
{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }} 
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "title": "My first blog post" } { "index": { "_index": "website", "_type": "blog" }} 
{ "title": "My second blog post" } 
{ "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" :3}} 
{ "doc" : {"title" : "My updated blog post"} }
bulk API 以此按顺序执行所有的 action (动作)。如果一个单个的动作因任何原因而失败,
它将继续处理它后面剩余的动作。当 bulk API 返回时,它将提供每个动作的状态(与发送
 
的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。
 

学习es的一些记录(具体安装略)

 

 

=======================以下顺序有点乱,是我个人测试用的一些示例,可以不用看=================================

GET _search
{
  "query": {
    "match_all": {}
  }
}

POST customer/external/_bulk
{"index":{"_id":"1"}} 
{"name": "John Doe" } 
{"index":{"_id":"2"}} 
{"name": "Jane Doe" }

GET customer/_search?q=*&sort=_id:desc

GET customer/_search
{ "query": 
  { "match_all": {} 
    
  }
  
}

GET customer/_search
{ "query": 
  { "match_all": {} 
    
  },
  "sort":[ 
     { "_id":  { 
       "order": "desc" 
        } 
      
      } 
  ] 
  
}

GET customer/_mapping

PUT /my-index 
{ "mappings": 
 { "properties": 
  {
"age": { "type": "integer" }, "email": { "type": "keyword" }, "name": { "type": "text" }
 }
} 
}


POST _analyze
{
  "analyzer": "whitespace",
  "text":     "The quick brown fox."
}
POST _analyze 
{ "analyzer": "ik_max_word", "text": "陈云丰" }


GET users/_search
{ "query": 
  { "match_all": {} 
    
  }
  
}


GET gulimall_product/_search

GET gulimall_product/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "skuTitle": "华为"
          }
        }
      ],
      "filter": [
        {
          "term": {
            "FIELD": "VALUE"
          }
        }
      ]
    }
  }
}

























 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值