es在windows上安装注意kibana与elasticsearch与ik分词器版本号保持一致(6.6.0版本)
ES下载地址:Past Releases of Elastic Stack Software | Elastic
IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
kibana下载地址:https://www.elastic.co/cn/downloads/past-releases/#kibana
一.es整合ik
将es压缩包解压,在es的D:\environments\elasticsearch-6.6.0\plugins路径下新建文件夹ik,将ik分词器解压到es中ik目录下.
二.启动es
双击D:\environments\elasticsearch-6.6.0\bin下的elasticsearch.bat
验证是否启动成功
http://localhost:9200/
三.kibana连接es
在D:\environments\kibana-6.6.0-windows-x86_64\config中的kibana.yml中添加
server.port: 5601 server.host: "localhost" elasticsearch.url: "http://127.0.0.1:9200" kibana.index: ".kibana"
四.启动kibana
双击D:\environments\kibana-6.6.0-windows-x86_64\bin中kibana.bat
打开页面
http://localhost:5601
五.数据测试
#1.开始创建Document
PUT /ecommerce/product/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
PUT /ecommerce/product/2
{
"name" : "jiajieshi yagao",
"desc" : "youxiao fangzhu",
"price" : 25,
"producer" : "jiajieshi producer",
"tags": [ "fangzhu" ]
}
PUT /ecommerce/product/3
{
"name" : "zhonghua yagao",
"desc" : "caoben zhiwu",
"price" : 40,
"producer" : "zhonghua producer",
"tags": [ "qingxin" ]
}
#2.查询
GET /ecommerce/product/2
#3.覆盖,替换文档(全量替换)
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags" : [ "meibai" , "fangzhu" ]
}
#注意:1.document是不可变的,如果要修改document的内容,可以通过全量替换,直接对document重新建立索引,替换里面所有的内容。2.es会将老的document标记为deleted(逻辑删除),然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除(物理删除)标记为deleted的document。3`替换必须带上所有的field,否则其他数据会丢失。
#4.修改(更新文档)
POST /ecommerce/product/1/_update
{
"doc" : {
"name" : "jiaqianban gaolujie yagao1"
}
}
#5.删除文档
DELETE /ecommerce/product/2
#注意:在删除一个document之后,我们可以从侧面证明,它不是立即物理删除的,因为它的一些版本号信息还是保留的
#6.使用query DSL 请求查询
GET /ecommerce/product/_search
{
"query" : {
"match_all" : {}
}
}
#6.1查询名称包含yaogao的商品,同时按照价格降序排列
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"name" : "yagao"
}
},
"sort" : [
{ "price" : "desc"}
]
}
#6.2分页查询
#总共3条商品,假设每页就显示1条商品,from是页码
GET /ecommerce/product/_search
{
"query" : { "match_all" : {}},
"from" : 0,
"size" : 1
}
#6.3指定查询项
GET /ecommerce/product/_search
{
"query" : {"match_all" : {}},
"_source" : ["name", "price"]
}
#6.4过滤查询
#搜索商品名称包含yaogao,而且售价大于35元的商品
GET /ecommerce/product/_search
{
"query" : {
"bool" : {
"must" : {
"match" : {
"name" : "yagao"
}
},
"filter" : {
"range" : {
"price": {"gt" : 35}
}
}
}
}
}
#7.full-text search(全文检索)
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"producer": "yagao producer"
}
}
}
#8.phrase search(短语搜索)
GET /ecommerce/product/_search
{
"query" : {
"match_phrase" : {
"producer" : "yagao producer"
}
}
}
#9.多条件查询
#名字中有"yagao",描述上可以有fangzhu也可以没有,价格不能是25元
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
}
}
}
在以上的实例中:
从第六条开始需要做出的补充:
两种请求分类:query string search / query DSL
第一种:
类似搜索全部商品: GET /ecommerce/product/_search (参数直接拼接在请求上,不带json参数的)
query string search的由来,因为search参数都是以http请求的query string来附带的。
搜索商品名称中包含yagao的商品,而且按照售价降序排列:
GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;但是
如果查询请求很复杂,是很难去构建的,所以在生产环境中,几乎很少使用query string search。
第二种:
DSL:Domain Specified Language,特定领域的语言
http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大太多了。
full-text search 全文检索)和 phrase search(短语搜索)的区别:
全文检索:会将输入的搜索串拆解开来,去索引里面去一一匹配,只要能匹配任意一个拆解后的单词,就可以作为结果返回。
phrase search: 要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配成功,才能作为结果返回。
多条件查询中的字段描述:
must: 表示一定要满足;
should: 表示可以满足也可以不满足;
must_not: 表示不能满足该条件;
minimum_should_match:1 :表示最小匹配度,可以设置为百分之百,设置了这个值的时候就必须满足should里面的设置了,另外注意这边should里面同一字段设置的多个值,意思是当这个值等于X或者等于Y都成立,务必注意格式。
与mysql之间的对比