什么是 Elasticsearch?

Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎,能够解决越来越多不同的应用场景。 The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。 能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视 化。Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上 百台服务器,处理 PB 级别的数据。

安装及配置

  1. 配置外网访问--->elasticsearch.yml
  2. network.host: 192.168.52.161
  3. cluster.initial_master_nodes: ["node-1"]
  4. http.port: 9200
  5. node.name: node-1
  6. 关于head配置时的跨域配置
  7. http.cors.enabled: true
  8. http.cors.allow-origin: "*"
  9. 访问:
  10. http://node1:9200/
  11. ---------------------------------------head 安装----------------------
  12. wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
  13. tar -zxvf node-v4.4.7-linux-x64.tar.gz
  14. #编辑/etc/profile添加
  15. export NODE_HOME=/home/zsm/es_head/node-v4.4.7-linux-x64
  16. export PATH=$PATH:$NODE_HOME/bin
  17. export NODE_PATH=$NODE_HOME/lib/node_modules
  18. source /etc/profile
  19. node --version
  20. npm install -g grunt-cli
  21. npm install
  22. npm run start
  23. ---------------------------------------kibana 安装----------------------
  24. #编辑kibana.yml配置文件
  25. elasticsearch.hosts: ["http://node1:9200"]
  26. 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":"小米手机-修改名字"
  }
}

查看索引的返回字段解释
image.png

复杂操作

#根据条件删除
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

参考文档

常见启动问题:https://www.cnblogs.com/zhi-leaf/p/8484337.html