elasticsearch简单入门

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: elasticsearch简单入门

Java环境

vim ~/.bash_profile

# java
export JAVA_HOME="/jdk1.8.0_202/bin"
export PATH=$PATH:$JAVA_HOME/bin

elasticsearch

https://www.elastic.co/guide/cn/elasticsearch/guide/current/running-elasticsearch.html

安装elasticsearch

下载:http://www.elastic.co

vim ~/.bash_profile

# elasticsearch
export ES_HOME="/elasticsearch-6.3.1"
export PATH=$PATH:$ES_HOME/bin

source ~/.bash_profile

启动:elasticsearch

守护进程在后台运行: elasticsearch -d

访问测试:http://127.0.0.1:9200/

或者:curl ‘http://localhost:9200/?pretty’

windows下载:http://curl.haxx.se/download.html

外网访问配置

vim config/elasticsearch.yml

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
# network.host: 192.168.0.1
network.host: 0.0.0.0

安装kibana

# kibana
export KIBANA_HOME="kibana-6.3.1-darwin-x86_64"
export PATH=$PATH:$KIBANA_HOME/bin

启动kibana: kibana

后台启动

nohup ./bin/kibana &

访问:http://localhost:5601

配置外网访问

vim config/kibana.yml

#server.host: "localhost"
server.host: "0.0.0.0"

报错解决

请求错误,需要添加请求头

{

“error” : “Content-Type header [application/x-www-form-urlencoded] is not supported”,

“status” : 406

}

-H “Content-Type: application/json”

请求测试:

curl -H "Content-Type: application/json" -XGET  'http://localhost:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}
'
curl -X GET "localhost:9200/_count" -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}
'

测试

1、添加数据

路径 /megacorp/employee/1 包含了三部分的信息:

megacorp 索引名称

employee 类型名称

1 特定雇员的ID

curl -X PUT "localhost:9200/megacorp/employee/1" -H 'Content-Type: application/json' -d'
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
'
curl -X PUT "localhost:9200/megacorp/employee/2" -H 'Content-Type: application/json' -d'
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
'
curl -X PUT "localhost:9200/megacorp/employee/3" -H 'Content-Type: application/json' -d'
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}
'

2、查询数据

# Query-string
curl -X GET "localhost:9200/megacorp/employee/_search?q=last_name:Smith"
# 查询表达式
curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}
'

Elasticsearch和传统关系型数据库区别:

  1. Elasticsearch中的 相关性
  2. 传统关系型数据库中的一条记录要么匹配要么不匹配

支持搜索方式

  1. 轻量搜索 _search?q=key:value
  2. 全文搜索 match
  3. 短语搜索 match_phrase
  4. 高亮搜索 highlight

聚合(aggregations)

集群健康

GET /_cluster/health

status 字段

  1. green 所有的主分片和副本分片都正常运行
  2. yellow 所有的主分片都正常运行,但不是所有的副本分片都正常运行
  3. red 有主分片没能正常运行

单机启动2个节点

https://jingyan.baidu.com/article/86fae3461e40cb3c48121a5b.html

文档元数据

_index

文档在哪存放, 索引名,这个名字必须小写,不能以下划线开头,不能包含逗号


_type

文档表示的对象类别

命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符


_id

文档唯一标识

要么提供自己的 id ,要么让 Elasticsearch 帮你生成

创建文档

自定义id:PUT 谓词(“使用这个 URL 存储这个文档”)

PUT /{index}/{type}/{id}

自动生成id:POST 谓词(“存储文档在这个 URL 命名空间下”)

POST /{index}/{type}/

创建新文档,不存在时才创建

PUT /website/blog/123/_create
PUT /website/blog/123?op_type=create

取回文档

GET /website/blog/123?pretty

GET /website/blog/123?_source=title,text
GET /website/blog/123/_source

更新文档

PUT /website/blog/123

删除文档

DELETE /website/blog/123

指定外部版本号

PUT /website/blog/2?version=5&version_type=external

文档是不可变的:他们不能被修改,只能被替换

文档的部分更新

POST /website/blog/1/_update

取回多个文档

GET /_mget

批量操作

POST /_bulk

create: 如果文档不存在,那么就创建它

index: 创建一个新文档或者替换一个现有的文档

update: 部分更新一个文档

delete: 删除一个文档


协调节点(coordinating node)


分片计算

shard = hash(routing) % number_of_primary_shards


number_of_replicas 指的是在索引设置中的设定副本分片数

搜索

映射(Mapping):描述数据在每个字段内如何存储

分析(Analysis): 全文是如何处理使之可以被搜索的

领域特定查询语言(Query DSL): Elasticsearch 中强大灵活的查询语言

GET /_search

返回结果

total 匹配到的文档总数

took 搜索请求耗费(毫秒)

shards 查询中参与分片的总数

timed_out 查询是否超时

搜索参数

size 返回的结果数量,默认是 10

from 跳过的初始结果数量,默认是 0

分页深度

将搜索引擎和所有其他数据库区别:

最大的差异在于 代表 精确值 (它包括 string 字段)的字段和代表 全文 的字段

  • 前缀表明这个词必须存在

倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表

分析器

GET /_analyze
{
  "analyzer": "standard",
  "text": "Text to analyze"
}

字符串: string

整数 : byte, short, integer, long

浮点数: float, double

布尔型: boolean

日期: date

查看映射

GET /<_index>/_mapping/<_type>

Lucene 不理解内部对象。 Lucene 文档是由一组键值对列表组成的


过滤情况 时,查询被设置成一个“不评分”或者“过滤”查询

查询情况 时,查询就变成了一个“评分”的查询


使用 查询(query)语句来进行 全文 搜索或者其它任何需要影响 相关性得分 的搜索。除此以外的情况都使用过滤(filters)。


查询

match_all 匹配所有文档 默认的查询

match 标准查询

multi_match

range 指定区间

gt 大于

gte 大于等于

lt 小于

lte 小于等于

term 查询被用于精确值 匹配

terms 多值进行匹配

exists 查询和 missing 指定字段中有值或无值


多查询组合

must 文档 必须 匹配

must_not 文档 必须不 匹配

should 如果满足这些语句中的任意语句,将增加 score ,否则,无任何影响

filter 必须 匹配,但它以不评分、过滤模式来进行

验证查询

GET /_validate/query?explain

Elasticsearch 的相似度算法

检索词频率/反向文档频率, TF/IDF


增-删-改-查 (CRUD)

深分页(Deep Pagination)


number_of_shards 每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。

number_of_replicas 每个主分片的副本数,默认值是 1 。

其他

查看当前节点的所有 Index

$ curl -X GET 'http://localhost:9200/_cat/indices?v'

列出每个 Index 所包含的 Type

$ curl 'localhost:9200/_mapping?pretty=true'

拓展文章

Elasticsearch-基础介绍及索引原理分析

https://www.cnblogs.com/dreamroute/p/8484457.html


Elasticsearch数据库

https://blog.csdn.net/aisemi/article/details/80212836


全文搜索引擎 Elasticsearch 入门教程

http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
安全 Linux 开发工具
Elasticsearch 搜索入门技术之一
Elasticsearch 搜索入门技术之一
359 1
|
JSON 自然语言处理 数据库
数据库-ElasticSearch入门(索引、文档、查询)
数据库-ElasticSearch入门(索引、文档、查询)
560 0
|
存储 关系型数据库 数据库
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
|
存储 Java API
Elasticsearch 7.8.0从入门到精通
这篇文章详细介绍了Elasticsearch 7.8.0的安装、核心概念(如正排索引和倒排索引)、RESTful风格、各种索引和文档操作、条件查询、聚合查询以及在Spring Boot中整合Elasticsearch的步骤和示例。
596 1
Elasticsearch 7.8.0从入门到精通
|
存储 关系型数据库 MySQL
浅谈Elasticsearch的入门与实践
本文主要围绕ES核心特性:分布式存储特性和分析检索能力,介绍了概念、原理与实践案例,希望让读者快速理解ES的核心特性与应用场景。
705 14
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
ELK是一套强大的日志管理和分析工具,广泛应用于日志监控、故障排查、业务分析等场景。本文档将详细介绍ELK的各个组件及其配置方法,帮助读者从零开始掌握ELK的使用。
|
JSON 搜索推荐 数据挖掘
ElasticSearch的简单介绍与使用【入门篇】
这篇文章是Elasticsearch的入门介绍,涵盖了Elasticsearch的基本概念、特点、安装方法以及如何进行基本的数据操作,包括索引文档、查询、更新、删除和使用bulk API进行批量操作。
ElasticSearch的简单介绍与使用【入门篇】
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
640 3
|
JSON 测试技术 API
黑马商城 Elasticsearch从入门到部署 RestClient操作文档
这篇文章详细介绍了如何使用Java的RestHighLevelClient客户端与Elasticsearch进行文档操作,包括新增、查询、删除、修改文档以及批量导入文档的方法,并提供了相应的代码示例和操作步骤。