Elasticsearch是基于Lucene开发的搜索引擎,也是近几年很火的全文搜索引擎,具有部署方便、运行稳定、搜索高效等特点,且支持分布式部署,易于扩展。本文对于近期学习的知识做下梳理。
基本概念
Elasticsearch 是 面向文档的,意味着它存储整个对象或文档。Elasticsearch 不仅存储文档,而且索引每个文档的内容使之可以被检索。在 Elasticsearch 中,你对文档进行索引、检索、排序和过滤--而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。
Elasticsearch 使用 JavaScript Object Notation 或者 JSON 作为文档的序列化格式。
实践
命令语法:
<HTTP Verb> /<Index>/<Type>/<ID>
http操作/索引/类型/文档ID
GET /_cat/health?v
GET /_cat/nodes?v
GET /_cat/indices?v
PUT /mycollect?pretty
DELETE /mycollect?pretty
文档操作
PUT /mycollect/_doc/1?pretty {"name": "agui"}
支持put|post方式更新数据 GET /mycollect/_doc/1
更新文档 支持put|post方式更新数据
PUT /mycollect/_doc/1?pretty {"name": "agui","age":"32"}
PUT /mycollect/_doc/1/_update?pretty {"script" : "ctx._source.age += 5"}
搜索数据
导入数据集(样例)
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
REST API方式搜索
GET /bank/_search?q=*&sort=account_number:asc&pretty
REQUEST BODY方式搜索,支持更灵活的条件设定和筛选
GET /bank/_search
{
"query": { "match_all": {} },
"sort": [
{ "account_number": "asc" }
]
}
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
练习:中文搜索
参考链接:
1.官方文档https://www.elastic.co/guide/en/elasticsearch/reference/6.6/index.html
2.阮一峰教程http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html