elasticsearch的使用

1.最新补充用docker安装

#下载镜像
docker pull elasticsearch:6.8.0
是不是很发现log里面有这么个东西 ?
# max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
最大虚拟内存区太小了,让你设置大点,咱们再运行下这个
sudo sysctl -w vm.max_map_count=262144
#创建并运行容器

docker run -di --name=changgou_elasticsearch -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e “discovery.type=single-node” -p 9200:9200 -p 9300:9300 elasticsearch:6.8.0

#进入容器
docker exec -it changgou_elasticsearch /bin/bash

linux 查找文件目录 

[root@localhost /]# find / -name elasticsearch-analysis-ik-7.7.1.zip 

用dokcerFile制作带分词器的镜像

# 定义基础镜像
FROM elasticsearch:6.8.0
# 定义作者信息
MAINTAINER feifeiwuxian <8888@qq.com>
# 添加jar包文件到镜像中, 后面是装到镜像里的名称
# 注意 es与ik 版本要对应
RUN ./bin/elasticsearch-plugin install --batch https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.0/elasticsearch-analysis-ik-6.8.0.zip
docker build -f DockerFile2 -t elasticsearch_ik ./
#创建并运行容器

docker run -di --name=changgou_elasticsearch -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e “discovery.type=single-node” -p 9200:9200 -p 9300:9300 elasticsearch_ik

 

1.下载安装elasticsearch和kibana

https://www.elastic.co/cn/elastic-stack

https://www.elastic.co/cn/downloads/past-releases#elasticsearch

https://www.elastic.co/cn/downloads/past-releases#kibana

这里选择6.8.0版本。

下面是原始下载图解。

 

 

安装分词插件 

https://github.com/medcl/elasticsearch-analysis-ik

https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.8.3

放在plugins目录里 

配置elasticsearch

配置kbana

elasticsearch.url: "http://localhost:9200"
i18n.locale: "zh-CN"

之后启动。都是启动bin 目录里./elasticsearch 和./kibana

在浏览器输入

localhost:9200出现如下则为成功

http://127.0.0.1:9200/_analyze
{
  "analyzer": "ik_smart",
  "text": "南京市长江大桥"
}

{
  "analyzer": "ik_max_word",
  "text": "南京市长江大桥"
}

安装谷歌插件ElasticSearch Head,

下面两个商店都可以,一个在线安装,一个离线安装

https://chrome.google.com/webstore/category/extensions

https://www.gugeapps.net/webstore/category/extensions

 

 

kibana地址http://127.0.0.1:5601/

左侧->开发者工具

核心概念

Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearch比传统关系型数据库如下:

索引库(indexes)------------->数据库(Databases)
类型(type)------------------>数据表(Table)
文档(Document)-------------->行(Row)
字段(Field)----------------->列(Columns)
映射(mappings)-------------->DDL创建数据库表的语句

详细说明:

概念说明
索引库(indexes)索引库包含一堆相关业务,结构相似的文档document数据,比如说建立一个商品product索引库,里面可能就存放了所有的商品数据。
类型(type)type是索引库中的一个逻辑数据分类,一个type下的document,都有相同的field,类似于数据库中的表。比如商品type,里面存放了所有的商品document数据。6.0版本以后一个index只能有1个type,6.0版本以前每个index里可以是一个或多个type。7.0以后,没有type这个概念了
文档(document)文档是es中的存入索引库最小数据单元,一个document可以是一条客户数据,一条商品数据,一条订单数据,通常用JSON数据结构表示。document存在索引库下的type类型中。
字段(field)Field是Elasticsearch的最小单位。一个document里面有多个field,每个field就是一个数据字段
映射配置(mappings)对type文档结构的约束叫做映射(mapping),用来定义document的每个字段的约束。如:字段的数据类型、是否分词、是否索引、是否存储等特性。type是模拟mysql中的table概念。表是有结构的,也就是表中每个字段都有约束信息;

 

 

 

 

 

 

 

 

#一、创建索引库
#1.创建索引库
PUT /heima
GET /heima
DELETE /heima

#二、配置映射
#1.1配置映射信息
#PUT /{索引库的名称}/{类型的名称}/_mapping
PUT /heima/goods/_mapping
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "subtitle": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images": {
      "type": "keyword",
      "index": false
    },
    "price": {
      "type": "double"
    }
  }
}
#一次创建索引库及配置映射(常用)
PUT /heima1
{
  "settings": {},
  "mappings": {
    "goods":{
      "properties": {
        "title":{
          "type": "text",
          "analyzer": "ik_max_word"
          
        },
        "subtitle":{
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "images":{
          "type": "keyword",
          "index": false
        },
        "price":{
          "type": "float",
          "index": true
        }
      }
    }
  }
}

#三、文档的操作
#3.1文档的新增
POST /heima/goods
{
  "title": "小米手机",
  "images": "http://baidu.com/img/time.jpg",
  "price": 2699
}
#查询
GET /heima/goods/B3KkOHcB-tyuQ7s-s7tG

#修改
POST /heima/goods/2
{
  "title": "小米手机",
  "images": "http://baidu.com/img/time.jpg",
  "price": 3999
}

DELETE /heima/goods/1
#批量删除
POST /heima/goods/_delete_by_query
{
  "query": {
    "match_all":{}
  }
}

#批量新增
POST /heima/goods/_bulk
{"index":{"_index" : "heima","_type" : "goods"}}
{"title":"大米手机","images":"http://image.leyou.com/12479122.jpg","price":3288}
{"index":{"_index" : "heima","_type" : "goods"}}
{"title":"小米手机","images":"http://image.leyou.com/12479122.jpg","price":2699}
{"index":{"_index" : "heima","_type" : "goods"}}
{"title":"小米电视4A","images":"http://image.leyou.com/12479122.jpg","price":4288}
{"index":{"_index" : "heima","_type" : "goods"}}
{"title": "华为手机","images": "http://image.leyou.com/12479122.jpg","price": 5288,"subtitle": "小米"}
{"index":{"_index" : "heima","_type" : "goods"}}
{"title":"apple手机","images":"http://image.leyou.com/12479122.jpg","price":5899.00}

#四、请求体查询
##4.1基本的查询
###1.查询 所有
POST /heima/goods/_search
{
  "query": {
    "match_all": {}
  }
}
###2.match查询,带分词器的查询,在指定的字段中进行搜索.类似sql里or
###将查询内容信息进行分词,去匹配,关键词之间的关系是or

POST /heima/goods/_search
{
  "query": {
    "match": {
      "title": "小米手机"
    }
  }
}
POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "小米手机"
}
###operator是查询的关键词之间的关系,默认是or
POST /heima/goods/_search
{
  "query": {
    "match": {
      "title": {
        "operator": "and", 
        "query": "小米手机"
      }
    }
  }
}

###3.多字段match查询,指定多个字段
POST /heima/goods/_search
{
  "query": {
    "multi_match": {
      "query": "小米",
      "fields": ["title","subtitle"]
    }
  }
}
###4.term查询,关键词匹配查询(查倒排索引表),不会对查询条件进行分词,把查询条件作为关键词去匹配
POST /heima/goods/_search
{
  "query": {
    "term": {
      "title": {
        "value": "小米"
      }
    }
  }
}
###5.多关键词的term查询,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于mysql的in:
POST /heima/goods/_search
{
  "query": {
    "terms": {
      "price":[
        2699,
        3288
        ]
    }
  }
}

#4.2查询结果的过滤
POST /heima/goods/_search
{
  "_source": ["title","price"],
  "query": {
    "term": {
      "title": {
        "value": "小米"
      }
    }
  }
}
#excludes不包含,includes包含,效果同上
POST /heima/goods/_search
{
  "_source": {
    "excludes": ["images","price"]
  },
  "query": {
    "term": {
      "title": {
        "value": "小米"
      }
    }
  }
}

#5.3高级查询
###1.布尔组合查询
###must必须满足条件,must not 必须不满足条件,should 应该满足
POST /heima/goods/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
          "title": "小米"
          }
        }
      ],
      "must_not": [
        {
          "match": {
          "title": "电视"
          }
        }
      ],
      "should": [
        {
          "match": {
          "title": "手机"
          }
        }
      ]
    }
  }
}
###2.范围查询
####gt 大于
####lt 小于
####gte 大于等于
####lte 小于等于
POST /heima/goods/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 3000,
        "lte": 5000
      }
    }
  }
}
###3.模糊搜索,默认偏差是2,纠正2个字母
POST /heima/goods/_search
{
  "query": {
    "fuzzy": {
      "title": "applaA"
    }
  }
}
POST /heima/goods/_search
{
  "query": {
    "fuzzy": {
      "title": {
        "value": "appla",
        "fuzziness": 1
      }
    }
  }
}
#5.4分页查询及排序查询
##pageSize:每页多少条
##currentPage:当前页

##size:每页显示多少条
##from:当前页(第一个文档)的起始顺序号 int from = (currentPage -1) *pageSize

#正序(升序)asc, 倒序(降序)desc
POST /heima/goods/_search
{
  "query": {
    "match_all": {}
  },
  "size": 2,
  "from": 4,
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

#5.5高亮查询
##关键词被字体标签包裹 <font color='red'>xx</font>
POST /heima/goods/_search
{
  "query": {
    "match": {
      "title": "小米手机"
    }
  },
  "highlight": {
    "pre_tags": "<font color='pink'>",
    "post_tags": "</font>",
    "fields": {
      "title": {}
    }
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值