初识elasticsearch

Elasticsearch是热门的全文检索引擎开源项目,已发展到7.x版本。本文介绍在mac系统下安装并启动Elasticsearch 7.10.1及Kibana的方法,还提及Kibana可进行数据可视化,通过其开发工具能完成增删改查文档等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

elasticsearch全文检索引擎,底层使用lucene,可扩展,高可用,易使用等特点使之成为最近几年来最炙手可热的搜索引擎开源项目,至今已发展到7.x版本,现在让我们初步安装并使用elasticsearch吧

版本: 7.10.1
系统环境:mac

安装并启动

  1. 安装并启动elasticsearch https://www.elastic.co/cn/downloads/elasticsearch
  2. 安装并启动kibana https://www.elastic.co/cn/downloads/kibana

基本使用

kibana 数据可视化,内部提供了开发工具,可以帮助初学者很好地了解并使用 restful api进行增删改查文档、了解集群状态、分析分词效果等。

访问 kibana 开发工具控制台 http://localhost:5601/app/dev_tools#/console

在这里插入图片描述

基本restful操作api

GET /_cat/indices

# https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html
# 删除索引
DELETE /china_city

# 写文档,自动生成索引
POST china_people/_doc/1
{
  "id":1,
  "province":"北京",
  "city":"北京",
  "name":"张三",
  "message":"Happy Morning",
  "location":{
    "lat":"39.90710271",
    "lon":"116.39568329"
  }
}

POST china_people/_doc/2
{
  "id":2,
  "province":"广东",
  "city":"深圳",
  "name":"李四",
  "messgae":"Happy Birthday",
  "location":{
    "lat":"22.56709771",
    "lon":"114.08477783"
  }
}

# 查询索引文档
GET china_people/_search
GET china_people/_doc/2
GET china_people/_source/2

# 查询文档结构
GET china_people/_mapping

# 根据查询结果更新文档

POST china_people/_update_by_query
{
  "script": {
    "source": "ctx._source.province=params.province;ctx._source.city=params.city",
    "lang": "painless",
    "params": {
      "province":"广东",
      "city":"ShenZhen"
    }
  },
  "query":{
    "match": {
      "city": "深圳"
    }
  }
}

# 批量写入文档
POST _bulk
{"index": {"_index": "china_people","_id":"3"}}
{"id":"3", "province":"上海", "city":"上海", "name":"精神小伙","message":"Birthday Happy","location":{"lat":"31.25976999","lon":"121.45385742"}}
{"index": {"_index": "china_people","_id":"4"}}
{"id":"4", "province":"湖北", "city":"武汉", "name":"有志青年", "message":"你好,武汉","location":{"lat":"30.6095498","lon":"114.29626465"}}
{"index": {"_index": "china_people","_id":"5"}}
{"id":"5", "province":"广东", "city":"深圳","name":"国之栋梁", "message":"世界之都","location":{"lat":"22.56709776","lon":"114.08477784"}}

DELETE china_people
# 设置分片为1
PUT china_people
{
  "settings": {
    "number_of_shards": 1
  }
}
GET china_people/_settings

GET china_people/_mapping
PUT china_people/_mapping
{
  "properties" : {
        "city" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "location" : {
          "type":"geo_point"
        },
        
        "message" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "province" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
}

## 搜索
GET china_people/_search
{
  "query": {
    "match": {
      "message": "栋梁"
    }
  }
}


## 组合搜索
GET china_people/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "province": "广东"
        }},
        {
          "match": {
            "name": "李四"
          }
        }
      ]
    }
  }
}

# 不是广东的
GET china_people/_search
{
  "query": {
    "bool": {"must_not": [
      {"match": {
        "province": "广东"
      }}
    ]}
  }
}

GET china_people/_search
{
  "query": {
    "bool": {"should": [
      {"match": {
        "province": "广东"
      }},
      {
        "match": {
          "province.keyword": "北京"
        }
      }
    ]}
  }
}

GET china_people/_count
{
  "query": {
    "bool": {"should": [
      {"match": {
        "province": "广东"
      }},
      {
        "match": {
          "province.keyword": "北京"
        }
      }
    ]}
  }
}

# 地理位置查询
GET china_people/_search
{
  "query": {
    "bool": {"must": [
      {
        "match": {
          "province.keyword": "北京"
        }
      }
    ]}
  },
  "post_filter": {
    "geo_distance": {
      "distance": "40km",
      "location": {
        "lat": "39.90710271",
        "lon": "116"
      }
    }
  }
}

# 分词分析
GET _analyze
{
  "text": "Happy.Birthday",
  "analyzer": "simple"
}

# 默认分词器,空格分隔
GET _analyze
{
  "text": "Happy.Birthday",
  "analyzer": "standard"
}

# letter 遇到不为字母的符号就分割 
GET _analyze
{
  "text": ["Happy.Birthday"],
  "tokenizer": "letter",
  "filter": ["lowercase"]
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值