@ruoli
2017-03-18T07:45:07.000000Z
字数 8956
阅读 4048
其他开源框架
此处对应版本ElasticSearch_1.7.1,windows 平台。
系统准备:
ES1.7.1,需要Jdk1.7.55+ 或Jdk1.8.20+ 支持。
从官方下载ES1.7.1,地址如下:
https://www.elastic.co/downloads/past-releases/elasticsearch-1-7-1
下载后,解压,双击 elasticsearch-1.7.1\bin\elasticsearch.bat即可运行。
启动完成后,访问 http://localhost:9200/,若出现ElasticSearch基础状态信息,则说明安装成功。
ElasticSearch 默认不允许跨域访问,如需跨域,则需要如下配置:
修改配置文件 elasticsearch-1.7.1\config\elasticsearch.yml
在最后顶格添加配置:http.cors.enabled: true
Head插件是一个elasticsearch的集群管理工具,是elasticsearch的一个可视化客户端。
在elasticsearch-1.7.1\bin目录下开启命令行,运行如下命令:
plugin -install mobz/elasticsearch-head
即可自动安装
安装完成后,即可访问Head插件主页:
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看集群的各种状态,如:CPU,内存使用情况,索引数据,搜索情况,http连接数等,安装方法如下:
在elasticsearch-1.7.1\bin目录下开启命令行,运行如下命令:
plugin -install lukas-vlcek/bigdesk/2.5.0
即可自动安装
安装完成后,即可访问Head插件主页:
Marvel也是elasticsearch的一个管理监控工具,集head和bigdesk的优点与一身,Marvel是收费软件,安装方法如下:
在elasticsearch-1.7.1\bin目录下开启命令行,运行如下命令:
plugin -install elasticsearch/marvel/latest
即可自动安装
安装完成后,即可访问Head插件主页:
也可离线安装,下载安装包:
下载后,解压到elasticsearch-1.7.1\plugins,并且将文件夹重命名为:marvel,重启 elasticsearch即可。
以下所有操作均使用Marvel插件来操作。
初始化索引,在创建索引时需要同时指定shareds碎片数量和replicas备份数量,创建library索引代码如下:
PUT http://localhost:9200/library/{"setting":{"index":{"number_of_shards":5,"number_of_replicas":1}}}
可以通过GET,带上_settings可以获取该索引的详细配置信息
GET /library/_settings
同时获取两个索引的信息
GET /library,library1/_settings
获取所有索引的信息
GET /_all/_settings
删除指定索引
DELETE /library
# -----索引名称# | -----type名称# | | ----文档ID# | | |# | | |# | | |# | | |# | | |# | | |PUT /library/books/1{"title":"Elasticsearch:the definitive guide","name":{"first":"zachary","last":"tong"},"publish_date":"2017-02-19","price":"49.99"}
注意:如果创建文档时,不指定id,则ES会自动分配一个UUID。
GET /library/books/1
#获取一个字段GET /library/books/1?_source=title#获取两个字段GET /library/books/1?_source=title,price#获取所有字段GET /library/books/1?_source
POST /library/books/1/_update{"doc":{"price":10}}
DELETE /library/books/1#删除类型DELETE /library/books
Multi GET API
可以更快更迅速的检索多个文档。
Mget API 参数是一个 docs数组,数组的每一个节点定义一个文档的 _index、_type、_id元数据。如下所示,其中 _source 为可选字段,用于指定要查询的列信息。
GET /_mget{"docs":[{"_index":"library","_type":"books","_id":1},{"_index":"library","_type":"books","_id":2,"_source":"title"},{"_index":"library","_type":"books","_id":2,"_source":["title","price"]}]}
GET /library/books/_mget{"docs":[{"_id":1},{"_type":"books","_id":2}]}
简便方法:
GET /library/books/_mget{"ids":["1","2"]}
批量操作的API:bulk
可以实现同时对多个文档的 create,update,delete。
请求体格式:
{action:{metadata}}\n{request body}\n{action:{metadata}}\n{request body}\n
其中 action包括如下内容:
create:当文档不存在时进行创建
index:创建新文档或替换旧文档
update:局部更新一个文档
delete:删除一个文档
注意:对文档进行批量操作时,不能进行美化代码操作,其是根据换行来区分数据的。
具体示例代码如下:
POST /library/books/_bulk{"index":{"_id":1}}{"title":"Elasticsearch the definitive guide1","price":49}{"index":{"_id":2}}{"title":"Elasticsearch the definitive guide2","price":59}
当 action 为 delete时,没有request body信息,如下
POST /library/books/_bulk{"delete":{"_id":1}}{"delete":{"_id":2}}
update 操作,示例如下:
POST /library/books/_bulk{"update":{"_id":1}}{"doc":{"price":18}}{"update":{"_id":2}}{"doc":{"price":28}}
所有 create、index、update、delete 可以组合一起使用
指定Index、指定 Type 的搜索
GET /library/books/_search?q=title:definitive
指定Index、不指定 Type 的搜索
GET /library/_search?q=title:definitive
不指定Index、不指定 Type 的搜索
GET /_search?q=title:definitive
Term查询某个字段中有某个关键词的文档
GET /library/books/_search{"query": {"term": {"title": "definitive"}}}
Terms 查询某个字段中有多个关键字的文档,minimun_match:最小匹配集,若值为1,则代表关键词里最少出现一个,若值为2,则代表关键词里最少出现两个
GET /library/books/_search{"query": {"terms": {"title": ["definitive","guide2"],"minimum_match": 2}}}
match 查询可接收文字、日期、时间 类型的数据
match 和 term 查询的区别是:match查询时,ES会给定合适的分析器,term查询则不会。
GET /library/books/_search{"query": {"match": {"price": "18"}}}
match_all 搜索指定索引下所有的文档
GET /library/books/_search{"query": {"match_all": {}}}
match_phrase 短语查询,slop 定义 关键词之间隔多少未知单词
GET /library/books/_search{"query": {"match_phrase": {"title": {"query": "the,guide","slop":1}}}}
multi_match 可同时查询多个字段,如下代码:查询 title 和 preview 两个字段中 包含 elasticsearch字段的文档
GET /library/books/_search{"query": {"multi_match": {"query": "preview","fields":["title","preview"]}}}
查询列数据为固定前缀的文档信息
GET /library/books/_search{"query": {"prefix": {"title":{"value": "el"}}}}
有 from、to、include_lower、include_upper、boost这些参数,
include_lower:是否包含范围的左边界,默认为true
include_upper:是否包含范围的右边界,默认为true
GET /library/books/_search{"query": {"range": {"price":{"from": 19.99,"to":30,"include_lower":false,"include_lower":false}}}}
允许使用通配符* 和 ? 进行查询
*:一个或者多个字符
?:仅代表一个字符
wildcard 查询 很耗性能
GET /library/books/_search{"query": {"wildcard": {"title":"el?s*"}}}
fuzzy查询
value:查询的关键字
boost:设置查询的权值,默认为1.0
min_similarity:设置匹配的最小相似度,默认值为0.5,对于字符串值为0-1,对于数值取值可能大于1,对于日期型,取值为1d、2d、1m 分别代表一天两天一月。
prefix_length:指明区分词项的共同前缀长度,默认值为0
max_expansions:指明查询中的词项可扩展的数目。
此查询比较耗性能。
GET /library/books/_search{"query":{"fuzzy": {"title":{"value": "guideb","min_similarity": 0.5}}}}
更多查询还有:
fuzzy_like_this 查询
fuzzy_like_this_field查询,功能与fuzzy_like_this一致,但fuzzy_like_this_field只可作用于一个字段。
more_like_this 查询
more_like_this_field 查询,类似于fuzzy_like_this_field。
fields 代表返回的结果字段,不指明代表返回全部
GET /library/books/_search{"fields": ["title"],"query": {"term": {"title": "definitive"}}}
partial_fields,可以指定和排除返回的字段,如下:
GET /library/books/_search{"partial_fields": {"partial": {"include": ["title"],"exclude": ["preview"]}},"query": {"term": {"title": "definitive"}}}
可以配合通配符使用:
GET /library/books/_search{"partial_fields": {"partial": {"include": ["ti*"],"exclude": ["pr*"]}},"query": {"term": {"title": "definitive"}}}
sort :asc 升序,desc
GET /library/books/_search{"query": {"term": {"title": "definitive"}},"sort":{"price":{"order":"desc"}}}
from 代表返回结果的开始下标,size 代表返回的结果数量
GET /library/books/_search{"from": 1,"size": 20,"query": {"term": {"title": "definitive"}}}
filter 查询 可以实现 基本查询的功能,语法类似与 Sql 语法,而且自带 cache缓存,提升二次查询速度,推荐使用 filter查询。
建立测试数据,建立store索引,products类型,新增四条文档:
PUT http://localhost:9200/store/{"setting":{"index":{"number_of_shards":5,"number_of_replicas":1}}}POST /store/products/_bulk{"index":{"_id":1}}{"price":10,"productID":"SD100"}{"index":{"_id":2}}{"price":20,"productID":"SD200"}{"index":{"_id":3}}{"price":30,"productID":"SD300"}{"index":{"_id":4}}{"price":40,"productID":"SD400"}
模拟SQL:select * from products where price=20
filered 查询商品价格是20的商品
GET /store/products/_search{"query": {"filtered": {"query": {"match_all": {}},"filter": {"term": {"price": 20}}}}}
此处查询内容可以指定多个值:
"price": [10,20]
可以进行组合查询,类似于 SQL中的 and 、or、not,格式如下:
{
"bool":{
"must":{},
"shoulld":{},
"must_not":{}
}
}
must:里面的条件必须满足,类似于 and
should:里面的条件至少满足一个,类似于 or
must_not:里面的条件必须不能满足,类似于 not
代码示例:
模拟SQL:select * from products where (price=20 or productID="SD100") and price != 30
GET /store/products/_search{"query": {"filtered": {"filter": {"bool": {"should":[{"term": {"price": 20}},{"term": {"productID": "sd100"}}],"must_not": [{"term": {"price": 30}}]}}}}}
模拟SQL:select * from products where productID='sd100' or (productID='SD200' and price=20)
GET /store/products/_search{"query": {"filtered": {"filter": {"bool": {"should":[{"term": {"productID": "sd100"}},{"bool": {"must": [{"term": {"productID": "sd200"}},{"term": {"price":20}}]}}]}}}}}
没有bool,直接使用 and、or、not
此种查询,不带缓存
模拟SQL:
select * from products where productID='sd100' or (productID='SD200' and price=20)
GET /store/products/_search{"query": {"filtered": {"filter": {"or":[{"term": {"productID": "sd100"}},{"and": [{"term": {"productID": "sd200"}},{"term": {"price":20}}]}]}}}}
136 0969 7310
模拟SQL:SLECT * FROM products where price BETWEEN 20 AND 40
gt:> 大于
lt:< 小于
gte: >= 大于等于
lte: <= 小于等于
GET /store/products/_search{"query": {"filtered": {"filter": {"range":{"price":{"gt":20,"lt":40}}}}}}
使用关键词:missing、exists
初始化数据:
POST /store/products/_bulk
{"index":{"_id":5}}
{"price":50,"productID":null}
模拟SQL:SELECT * FROM products where productID is null
GET /store/products/_search{"query": {"filtered": {"filter": {"missing": {"field": "productID"}}}}}
模拟SQL:SELECT * FROM products where productID is not null
GET /store/products/_search{"query": {"filtered": {"filter": {"exists": {"field": "productID"}}}}}
类似于SQL 中的 where
1、must、should、must_not
2、minmum_should_match:表示一个文档中 至少 匹配多少个关键词才算匹配成功,一般作用于should。
3、disable_coord:启用和禁用一个文档中所包含所有关键词的分数得分计算,默认值是 false。
将两个查询封装在一起,降低一个查询结果返回的分值
positive部分:查询的查询结果分值不变
negative部分:查询的结果分值会被降低
negative_boost部分:设置negative中要降低的分数。
可以让一个查询得到一个恒定的分值。
可以查询其他索引里面的数据。