工具
sql转换 https://github.com/NLPchina/elasticsearch-sql/
Elasticsearch权威指南 https://www.gitbook.com/book/looly/elasticsearch-the-definitive-guide-cn/details
Query-DSL 常用关键字:
query,search_type
term,terms, match,match_phrase,multi_match,fuzzy
bool,and,or,not,limit,must,must_not,should
range,size,from,to,gt,gte,lt,lte
field,fields ,aggs,count,sum,min,max,avg
windows环境搭建
Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。 无论在开源还是专有领域, Lucene可以被认为是迄今为止最先进、 性能最好的、 功能最全的搜索引擎库。
- 分布式的实时文件存储, 每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器, 处理PB级结构化或非结构化数据
本文使用windows版本
Kibana https://www.elastic.co/cn/downloads/kibana
Elasticsearch https://www.elastic.co/cn/downloads/elasticsearch
基本概念
在Elasticsearch中, 文档归属于一种类型(type),而这些类型存在于索引(index)中, 我们可以画一些简单的对比图来类比传统关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch -> 索引-> 类型-> 文档-> 字段
基本语法
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
PUT /megacorp/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /megacorp/employee/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
GET /megacorp/employee/1
GET /megacorp/employee/_search ---搜索全部
链接方式
GET /megacorp/employee/_search?q=last_name:Smith
使用DSL语句查询
GET /megacorp/employee/_search
{
"query": {
"match": {
"last_name": "Smith"
}
}
}
更复杂的搜索
GET /megacorp/employee/_search
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 30
}
}
}
}
}
}
全文搜索
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
短语搜索
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}
搜索高亮
GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}
分析
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests.keyword" }
}
}
}
聚合也允许分级汇总。 例如, 让我们统计每种兴趣下职员的平均年龄:
GET /megacorp/employee/_search
{
"aggs" : {
"all_interests" : {
"terms" : { "field" : "interests.keyword"},
"aggs" : {
"avg_age" : {
"avg" : { "field" : "age" }
}
}
}
}
}