@ruoli
2017-03-18T15:45:07.000000Z
字数 8956
阅读 3693
其他开源框架
此处对应版本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中要降低的分数。
可以让一个查询得到一个恒定的分值。
可以查询其他索引里面的数据。