什么是 Elasticsearch?
Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎,能够解决越来越多不同的应用场景。 The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。 能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视 化。Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上 百台服务器,处理 PB 级别的数据。
安装及配置
配置外网访问--->elasticsearch.yml
network.host: 192.168.52.161
cluster.initial_master_nodes: ["node-1"]
http.port: 9200
node.name: node-1
关于head配置时的跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
访问:
http://node1:9200/
---------------------------------------head 安装----------------------
wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
tar -zxvf node-v4.4.7-linux-x64.tar.gz
#编辑/etc/profile添加
export NODE_HOME=/home/zsm/es_head/node-v4.4.7-linux-x64
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules
source /etc/profile
node --version
npm install -g grunt-cli
npm install
npm run start
---------------------------------------kibana 安装----------------------
#编辑kibana.yml配置文件
elasticsearch.hosts: ["http://node1:9200"]
server.host: "0.0.0.0"
elasticsearch:https://repo.huaweicloud.com/elasticsearch/7.6.2/
kibana: https://mirrors.huaweicloud.com/kibana/7.6.2/?C=N&O=D
可视化界面elasticsearch-head.https://github.com/mobz/elasticsearch-head
ik分词器 https://github.com/medcl/elasticsearch-analysis-ik
基本操作
#创建索引
PUT /shopping/
#查看所有的索引
GET /_cat/indices?v
#查看单个索引
GET /shopping
#删除索引
DELETE /shopping
#通过doc方式新增文档使用自增主键
POST /shopping/_doc
{
"title":"小米手机",
"category":"小米6A",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":666.00
}
#通过doc方式新增文档 -->指定主键
POST /shopping/_doc/101
{
"title":"小米手机",
"category":"小米7A",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":777.00
}
#查看文档
GET /shopping/_doc/101
#修改内容 注意这里必须使用update 并且如果修改部分字段必须使用doc格式修改否则可能丢失数据
POST /shopping/_update/101
{
"doc":{
"title":"小米手机-修改名字"
}
}
复杂操作
#根据条件删除
POST /shopping/_delete_by_query
{
"query":{
"match":{
"price":4000
}
}
}
#指定返回字段
GET /shopping/_search?q=title:小米
{
"_source":["title","category","price"],
"sort": [
{
"price": {
"order": "desc"
}
}
],
"from": 0,
"size": 2
}
#组合查询条件 or
GET /shopping/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "7A"
}
},
{
"match": {
"category": "6A"
}
}
]
}
}
}
#组合查询条件 and
GET /shopping/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"category": "华为"
}
},
{
"match": {
"price": 4000
}
}
]
}
}
}
#增加过滤条件 gt大于 gte大于等于 lte小于 lte小于等于
GET /shopping/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"category": "华为"
}
}
],
"filter": [
{
"range": {
"price": {
"gte": 1000,
"lte": 2000
}
}
}
]
}
}
}
概念解释
关于分词
term,直接查询精确的
match,会使用分词器解析!(先分析文档,然后通过分析的文档进行查询)
keyword没有被分词精确查询多个值
java操作
java开发官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high-document-get.html#java-rest-high-document-get-request-optional-arguments
参考代码:https://www.cnblogs.com/guoxiangyue/p/9640186.html
开发代码:https://gitee.com/wt_study_demo/springboot-demos