首页 > 其他分享 >elasticsearch笔记一

elasticsearch笔记一

时间:2023-11-05 23:45:39浏览次数:48  
标签:9200 笔记 application json elasticsearch pretty curl localhost

安装

官网链接:[Installation and Upgrade Guide 7.2] | Elastic =》 Installing the Elastic Stack

https://www.elastic.co/guide/en/elastic-stack/7.2/installing-elastic-stack.html

系统支持:支持一览表 | Elastic

启动:sh /usr/local/elasticsearch/bin/elasticsearch -d -p pid

目录结构

类型 描述 默认位置 设置
bin ⼆进制脚本包含启动节点的elasticsearch {path.home}/bin
conf 配置⽂件包含elasticsearch.yml {path.home}/config path.conf
data 在节点上申请的每个index/shard的数据⽂件的位置。 可容纳多个位置 {path.home}/data path.data
logs ⽇志⽂件位置 {path.home}/logs path.logs
plugins 插件⽂件位置。每个插件将包含在⼀个⼦⽬录中。 {path.home}/plugins path.plugins

核心概念

  • 索引(index)
    • ⼀个索引可以理解成⼀个关系型数据库。
  • 类型(type)
    • ⼀种type就像⼀类表,⽐如user表,order表。 注意: ES 5.x中⼀个index可以有多种type。 ES 6.x中⼀个index只能有⼀种type。 ES 7.x以后已经移除type这个概念。
  • 映射(mapping)
    • mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。
  • ⽂档(document)
    • ⼀个document相当于关系型数据库中的⼀⾏记录。
  • 字段(field)
    • 相当于关系型数据库表的字段
  • 集群(cluster)
    • 集群由⼀个或多个节点组成,⼀个集群有⼀个默认名称"elasticsearch"。
  • 节点(node)
    • 集群的节点,⼀台机器或者⼀个进程 分⽚和副本(shard) 副本是分⽚的副本。分⽚有主分⽚(primary Shard)和副本分⽚(replica Shard)之分。 ⼀个Index数据在物理上被分布在多个主分⽚中,每个主分⽚只存放部分数据。 每个主分⽚可以有多个副本,叫副本分⽚,是主分⽚的复制。

使用

配置

curl -X GET "http://localhost:9200/_cluster/settings?pretty"

curl -X PUT "http://localhost:9200/_cluster/settings" -H 'Content-Type:application/json' -d '
{
 "persistent": {
 "action.auto_create_index": "false"
 }
}
'
#当索引不存在并且auto_create_index为true的时候,新增⽂档时会⾃动创建索引,否则会报错。


索引的使用

#获取es的状态
curl -X GET "localhost:9200?pretty" [-v]

#新增
curl -X PUT "localhost:9200/nba?pretty"

#获取
curl -X GET "localhost:9200/nba?pretty"

#新增一个文档
curl -X PUT "localhost:9200/dzy/_doc/1?pretty" -H 'Content-Type:application/json' -d '
{
 "user" : "louis",
 "message" : "louis is good"
}'

curl -X GET "localhost:9200/dzy/_doc/1?pretty"

#删除一个文档
curl -X DELETE "localhost:9200/dzy/_doc/1?pretty"

#批量请求
curl -x GET "localhost:9200/nba,cba?pretty"

#获取所有
curl -X GET "localhost:9200/_all"

curl -X GET "localhost:9200/_cat/indices?v"

#存在
curl -I "localhost:9200/nba"

#关闭
curl -X POST "localhost:9200/nba/_close"

#打开
curl -X POST "localhost:9200/nba/_open"

mapping

#新增mapping【同修改】
curl -X PUT "localhost:9200/nba/_mapping" -H 'Content-Type:application/json' -d '
{
    "properties": {
        "name": {
            "type": "text"
        },
        "team_name": {
            "type": "text"
        },
        "position": {
            "type": "keyword"
        },
        "play_year": {
            "type": "keyword"
        },
        "jerse_no": {
            "type": "keyword"
        },
         "country": {
         "type": "keyword"
        } 
    }
}
'

#获取mapping
curl -X GET "localhost:9200/nba/_mapping?pretty"

#批量获取
curl -X GET "localhost:9200/nba,cba/mapping"

#获取所有
curl -X GET "localhost:9200/_mapping"

curl -X GET "localhost:9200/_all/_mapping"

文档【document】

#新增文档【指定ID】
curl -X PUT "localhost:9200/dzy/_doc/1?pretty" -H 'Content-Type:application/json' -d '
{
 "user" : "louis",
 "message" : "louis is good"
}'
#新增文档【不指定ID】
curl -X POST "localhost:9200/dzy/_doc?pretty" -H 'Content-Type:application/json' -d '
{
 "user" : "louis",
 "message" : "louis is good"
}'

#查询指定文档
curl -X GET "localhost:9200/dzy/_doc/P4Oun4sBWV7jQDu0U9du?pretty"

#指定操作类型
curl -X PUT "localhost:9200/nba/_doc/1?op_type=create" -d '{xxx}' 这样如果文档存在就会报错

#查看多个文档
curl -X GET "localhost:9200/_mget" -H 'Content-Type:application/json' -d '
{
    "docs": [
        {
            "_index": "dzy",
            "_type": "_doc",
            "_id": "1"
        },
        {
            "_index": "dzy",
            "_type": "_doc",
            "_id": "P4Oun4sBWV7jQDu0U9du"
        }
    ]
}'

curl -X GET "localhost:9200/dzy/_mget?pretty" -H 'Content-Type:application/json' -d '
{
    "docs": [
        {
            "_type": "_doc",
            "_id": "1"
        },
        {
            "_type": "_doc",
            "_id": "P4Oun4sBWV7jQDu0U9du"
        }
    ]
}'

#修改文档
curl -X POST "localhost:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
 "doc": {
 "name": "哈登",
 "team_name": "⽕箭",
 "position": "双能卫",
 "play_year": "10",
 "jerse_no": "13"
 }
}'

#向_source字段,增加一个字段
curl -X POST "localhost:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
 "script": "ctx._source.age = 18"
}'
#向_source字段,删除一个字段
curl -X POST "localhost:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
 "script": "ctx._source.remove(\"age\")"
}'

curl -X POST "localhost:9200/nba/_update/1" -H 'Content-Type:application/json' -d '
{
    "script": {
        "source": "ctx._source.age += params.age",
        "params": {
            "age": 4
        }
    }
}'

测试见图1-1:
curl -X POST "localhost:9200/dzy/_update/P4Oun4sBWV7jQDu0U9du" -H 'Content-Type:application/json' -d '
{
    "script": {
        "source": "ctx._source.message = params.message",
        "params": {
            "message": "renew message"
        }
    }
}'

curl -X DELETE "localhost:9200/nba/_doc/1"
#注意!!! upsert 当指定的⽂档不存在时,upsert参数包含的内容将会被插⼊到索引中,作为⼀个新⽂档;如果指定的⽂档存在,ElasticSearch引擎将会执⾏指定的更新逻辑。

图1-1:

image-20231105222156942

搜索

新建索引,并指定mapping

curl -X PUT "localhost:9200/dzy" -H 'Content-Type:application/json' -d '
{
    "mappings": {
        "properties": {
            "name": {
                "type": "text"
            },
            "team_name": {
                "type": "text"
            },
            "position": {
                "type": "text"
            },
            "play_year": {
                "type": "long"
            },
            "jerse_no": {
                "type": "keyword"
            }
        }
    }
}'

image-20231105222850683

查询索引

curl -X GET "localhost:9200/dzy/_mapping?pretty"

image-20231105222906153

新增文档

curl -X PUT "localhost:9200/dzy/_doc/1?pretty" -H 'Content-Type:application/json' -d '
{
 "name": "哈登",
 "team_name": "⽕箭",
 "position": "得分后卫",
 "play_year": 10,
 "jerse_no": "13"
}'

curl -X PUT "localhost:9200/dzy/_doc/2?pretty" -H 'Content-Type:application/json' -d '
{
 "name": "库⾥",
 "team_name": "勇⼠",
 "position": "控球后卫",
 "play_year": 10,
 "jerse_no": "30"
}'

curl -X PUT "localhost:9200/dzy/_doc/3?pretty" -H 'Content-Type:application/json' -d '
{
 "name": "詹姆斯",
 "team_name": "湖⼈",
 "position": "⼩前锋",
 "play_year": 15,
 "jerse_no": "23"
}'
  • term(词条)查询和full text(全⽂)查询

    • 词条查询:词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时,才匹配搜 索。
    • 全⽂查询:ElasticSearch引擎会先分析查询字符串,将其拆分成多个分词,只要已分析的字 段中包含词条的任意⼀个,或全部包含,就匹配查询条件,返回该⽂档;如果不包含任意⼀ 个分词,表示没有任何⽂档匹配查询条件
  • 单条term查询

    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
        "query": {
            "term": {
                "jerse_no": "23"
            }
        }
    }'
    
  • 多条term查询

    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
        "query": {
            "terms": {
                "jerse_no": [
                    "23",
                    "13"
                ]
            }
        }
    }'
    
  • match_all

    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
     "query": {
     "match_all": {}
     },
     "from": 0,
     "size": 10
    }
    '
    
  • match

    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
        "query": {
            "match": {
            	"name":"库"
            }
        }
    }
    '
    
  • multi_match

    curl -X POST "localhost:9200/dzy/_update/2" -H 'Content-Type:application/json' -d '
    {
     "doc": {
     "name": "库⾥",
     "team_name": "勇⼠",
     "position": "控球后卫",
     "play_year": 10,
     "jerse_no": "30",
     "title": "the best shooter"
     }
    }'
    
    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
        "query": {
            "multi_match": {
                "query": "shooter",
                "fields": [
                    "title",
                    "name"
                ]
            }
        }
    }
    '
    
  • match_phrase [类似term]

    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
        "query": {
            "match_phrase ": {
            	"title": "the best"
            }
        }
    }
    '
    
  • match_phrase_prefix

    curl -X POST "localhost:9200/dzy/_search?pretty" -H 'Content-Type:application/json' -d '
    {
        "query": {
            "match_phrase_prefix": {
            	"title": "the b"
            }
        }
    }
    '
    

问题

启动报错【原因,elasticserach不支持root用户启动】

org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

image-20231105171040539

解决

使用其他用户

adduser es
passwd es
chown -R es:es elasticsearch-6.8.9/
chmod 770 elasticsearch-6.8.9/

启动报错【最大虚拟内存不够】

问题一:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

image-20231105174942714

1.修改vm.max_map_count

[root@localhost ~]# sysctl -a|grep vm.max_map_count
vm.max_map_count = 65530
[root@localhost ~]# sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
[root@localhost ~]# sysctl -a|grep vm.max_map_count
vm.max_map_count = 262144

2.如果重启虚拟机 1)失效则在 /etc/sysctl.conf文件最后添加一行(永久修改)

vm.max_map_count=262144

问题二:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

network.host: 0.0.0.0
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true
http.cors.allow-origin: "*"

标签:9200,笔记,application,json,elasticsearch,pretty,curl,localhost
From: https://www.cnblogs.com/dzystudy/p/17811582.html

相关文章

  • 【刷题笔记】101. Symmetric Tree
    题目Givenabinarytree,checkwhetheritisamirrorofitself(ie,symmetricarounditscenter).Forexample,thisbinarytree[1,2,2,3,4,4,3]issymmetric:1/\22/\/\3443Butthefollowing[1,2,2,null,3,null,3]isnot:1......
  • 第八周学习笔记
    #定时器的基本原理概念以及应用##1.定时器的基本原理定时器本质上是一个计数器。如果输入的是一个恒定的脉冲信号源(一般情况下是时钟信号),我们就可以根据定时器的计数(脉冲个数)和时钟频率计算出时间,这个就是定时器的基本原理。当然,定时器也可以作为计数器来使用,例如计算外部脉冲......
  • 学习笔记八
    定时器及始终服务摘要:本章讨论了定时器和定时器服务;介绍了码硬件定时器的原理和基于Intelx86的PC中的硬件定时器;讲解了CPU操作和中断处理;指述了Linux中与定时器相关的系统调用、库函数和定时器服务命令;探讨了进程间隔定时器器、定时器生成的信号,并通过示例演示了进程间隔定......
  • 《需求分析与系统设计》阅读笔记3
     软件体系结构定义了系统中相互作用的软件构件及子系统的结构和组织形式。它提供了一种对设计的保护措施,以防止作为系统阶段的设计出现失败。因此在详细系统规格说明工作开始之前,软件开发团队必须选定全体开发人员都要遵循的体系结构模式和原则。所有软件建模的最重要目标都是......
  • 学习笔记8
    第五章定时器及时钟服务一、知识点归纳(一)硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以料青确的频率驱动计数器。使用一个倒计时值对计数器进行编程,每个时钟信号减1。当计改减为0时,计数器向CPU生成一个定时器......
  • 学习笔记
    双引号:把搜索词放在双引号中代表完全匹配搜索,搜索结果返回的页面包含双引号中出现的所有的词且顺序也必须完全匹配。减号:搜索不包含减号后面的词的页面,使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词。星号*:在Google 中搜索,其中的*号代表任何文字。返回......
  • HTML笔记
    2023-11-051、HTML(超文本标记语言)是一种标记语言(标记标签(来描述网页)),而不是编程语言。HTML文档(Web页面)包含了HTML标签和文本内容。2、HTML标签(HTML标记标签)尖括号包围的关键词。 eg.<html>成对出现。  eg.<b>(开始标签(开放标签))和<b>(结束标签(闭合标签))      ......
  • 学习笔记8
    并行计算硬件定时器是计算机系统中的一个重要组件,由时钟源和可编程计数器组成。时钟源通常是晶体振荡器,驱动计数器以固定频率生成定时器中断。实时时钟(RTC):用于提供系统的实时时间和日期信息,通常由小型备用电池供电,即使计算机关闭也能继续运行。可编程间隔定时器(PIT):是......
  • JUC并发编程学习笔记(十二)Stream流式计算
    Stream流式计算什么是Stream流式计算大数据:存储+计算集合、MySql这些的本质都是存储东西的;计算都应该交给流来操作!一个案例说明:函数式接口、lambda表达式、链式编程、Stream流式计算packageorg.example.stream;importjava.util.Arrays;importjava.util.List;impo......
  • 前端开发笔记[5]-rust的webassembly
    摘要基于rust开发webassembly入门,通过rust实现在网页中弹出警告框.rust的webassembly开发方式https://zhuanlan.zhihu.com/p/104299612入门Rust开发WebAssemblyRust编译为WebAssembly在前端项目中使用https://zhuanlan.zhihu.com/p/662991464相对来说,使用Rust开发......