一、ElasticSearch的下载
下载地址https://www.elastic.co/downloads/elasticsearch
选择windows版本的下载
解压后运行bin下的elasticsearch.bat文件
访问http://localhost:9200/ 进行验证
出现下图即为启动成功
二、辅助管理工具Kibana5
下载地址:https://www.elastic.co/cn/downloads/kibana
解压后修改config/kibana.yml中的elasticsearch.url值为已启动的ES,默认为http://localhost:9200/
启动bin/kibana.bat
访问http://localhost:5601 需ES启动成功Kibana5才能启动成功访问该页面
三、
#查询所有
GET /_search
返回数据含义:
took:耗时多少毫秒
timed_out:是否超时,默认无timeout
_shards:shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shards上去,当然了,每个primary shards都可能会有一个或多个replic shards,所以请求也可以到primary shard的其中一个replica shard上去。
hits.total:本次搜索返回的结果总条数
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
hits.hits:包含了匹配搜索的document的详细数据,默认查询前10条数据,按_score降序排序
设置timeout时间:
#timeout=10ms,timeout=1s,timeout=1m
GET /_search?timeout=10m
#! Deprecation: the default number of shards will change from [5] to [1] in 7.0.0; if you wish to continue using the default of [5] shards, you must manage this on the create index request or with an index template
7.0之前默认会创建5个shared,7.0开始之后创建一个shard,需要5个的话要修改配置
#创建Document
PUT /ecommerce/product/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
#查询
GET /ecommerce/product/1
#替换文档(全量替换)
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
注意:document是不可变的,可以通过全量替换修改,重新建立索引,替换里面所有内容;
es会将老的document标记为deleted,然后新增一个document给我们使用,再在适当的时机在后台自动删除标记为deleted的document;
替换必须带上所有的filed,否则其他数据会丢失。
#更新文档(修改)
POST /ecommerce/product/1/_update
{
"doc": {
"name": "jiaqiangban1 gaolujie yagao"
}
}
#删除文档(删除)
DELETE /ecommerce/product/1
#query string search
GET /ecommerce/product/_search
#搜索商品名称中包含yagao的商品,而且按照售价降序排序
GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
#query DSL
#1.查询所有的商品
GET /ecommerce/product/_search
{
"query": { "match_all": {} }
}
#2.查询名称包含yagao的商品,同时按照价格降序排序
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"name" : "yagao"
}
},
"sort": [
{ "price": "desc" }
]
}
#3.分页查询
GET /ecommerce/product/_search
{
"query": { "match_all": {} },
"from": 2,
"size": 2
}
#4.查询指定项
#指定要查询出来商品的名称和价格
GET /ecommerce/product/_search
{
"query": { "match_all": {} },
"_source": ["name", "price"]
}
#5.过滤查询
#搜索商品名称包含yagao,而且售价大于25元的商品
GET /ecommerce/product/_search
{
"query" : {
"bool" : {
"must" : {
"match" : {
"name" : "yagao"
}
},
"filter" : {
"range" : {
"price" : { "gt" : 25 }
}
}
}
}
}
#6.full-text search(全文检索)
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"producer" : "yagao producer"
}
}
}
#7.phrase search(短语搜索)
#跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引
#面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
#phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含
#一模样的,才可以算匹配,才能作为结果返回
GET /ecommerce/product/_search
{
"query" : {
"match_phrase" : {
"producer" : "gaolujie producer"
}
}
}
#8.多条件查询
#名字中有"yagao",描述上可以有fangzhu也可以没有,价格不能是25元
#must表示一定要满足;
#should表示可以满足也可以不满足;
#must_not表示不能满足该条件;
#"minimum_should_match": 1,表示最小匹配度,可以设置为百分百
#Minimum Should Match,设置了这个值的时候就必须满足should里面的设置了,另外注意这边should里面同一字段设置的多个值(意思是当这个值等于X或者等于Y的时候都成立,务必注意格式)
GET /ecommerce/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "yagao"
}
}
],
"should": [
{
"match": {
"desc": "fangzhu"
}
},
{
"match": {
"desc": "caoben"
}
}
],
"must_not": [
{
"match": {
"price": 25
}
}
],
"minimum_should_match": 1
}
}
}