elasticsearch 下面参数详细解释
java 搜索查询看官方文档
bash
https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.8/connecting.html#_your_first_request
bash
{
"name" : "Tom Foster",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "x.x.x",
"build_hash" : "1f1a3eee09505e036106146dc1949dc5dc87",
"build_timestamp" : "xxxx-11-18T22:40:03Z",
"build_snapshot" : false,
"lucene_version" : "x.x.x"
},
"tagline" : "You Know, for Search"
}
bash
这个JSON表示Elasticsearch节点的响应,包含了一些Elasticsearch集群和节点自身的信息。主要参数说明如下:
- name:节点的名称,默认为随机分配的名称。
- cluster_name:Elasticsearch集群的名称,默认为"elasticsearch"。
- version:节点的Elasticsearch版本信息,包含版本号、build hash值、构建时间等信息。
- number:Elasticsearch的具体版本号。
- build_hash:构建该版本Elasticsearch代码的commit hash值。
- build_timestamp:构建的时间戳。
- build_snapshot:是否为快照build版本。
- lucene_version:该Elasticsearch版本所使用的Lucene版本号。
- tagline:Elasticsearch的tagline,可以看作一个标语或口号。默认是"You Know, for Search"。
所以这些信息可以让我们很清楚地了解节点的Elasticsearch版本,以及集群名称等情况。
bash
查看节点
GET /_cat/nodes
查看索引
GET /_cat/indices
bash
创建索引
PUT /megacorp
添加文档
PUT megacorp/_doc/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
bash
在 Elasticsearch 8.x 版本中,PUT 方法直接对文档 ID 进行索引操作已经被移除,不再支持这种用法。
测试已不支持
POST /megacorp/employee/_doc/2
创建后展示信息
bash
{
"_index": "megacorp",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
bash
这个JSON对象包含了Elasticsearch执行索引文档操作后的响应信息,主要字段说明如下:
- _index: 文档被索引到的索引名。
- _id: 文档的ID。
- _version: 文档的版本号,文档被修改时版本号会+1。
- result: 操作结果,这里是created表示文档被创建。
- _shards: 分片信息。total为总分片数,successful为操作成功的分片数,failed为失败的分片数。
- _seq_no: 序列号,代表操作顺序。
- _primary_term: 主分片的任期(term)号,主分片发生变更时会增加。
获取es文档
bash
GET /megacorp/_doc/1
结果
{
"_index": "megacorp",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
更新文档方式一
bash
POST /megacorp/_update/1
{
"doc": {
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "music" ]
}
}
更新返回值
bash
{
"_index": "megacorp",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
更新文档方式一
bash
POST /megacorp/_update_by_query
{
"script": {
"source": "ctx._source.age += params.increment",
"params": {
"increment": 1
}
},
"query": {
"match": {
"first_name": "John"
}
}
}
搜索
bash
GET /megacorp/_search
返回
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "megacorp",
"_id": "1",
"_score": 1,
"_source": {
"about": "I love to go rock climbing",
"last_name": "Smith",
"interests": [
"music"
],
"first_name": "John",
"age": 30
}
}
]
}
}
获取索引文档数据结构
bash
GET /megacorp/_mapping
返回
{
"megacorp": {
"mappings": {
"properties": {
"about": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"age": {
"type": "long"
},
"first_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"interests": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"last_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
修改文档类型
要修改 Elasticsearch 中已存在索引的字段映射(mapping),可以通过 PUT 请求发送修改后的映射定义。
例如,要将索引 megacorp 中的 first_name 字段类型从改为 text 可以这样:
bash
PUT /megacorp/_mapping
{
"properties": {
"first_name": {
"type": "text"
}
}
}
删除索引
bash
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
在 Elasticsearch 中,text 和 keyword 是两种不同的字段类型(field types)。
text 类型:
- 它是全文字段,用于全文搜索。text 字段会进行分词,会分析字符串,转换成词的组合,建立索引。
- 支持模糊匹配、Phrase查询等全文搜索语法。
- 但不支持聚合(aggregation)操作,因为经过分词后进行了拆分。
- 适用于长文本、文章内容等需要全文搜索的字段。
keyword 类型:
- 它是精确值字段,会作为一个整体进行索引,不进行分词和分析。
- 支持聚合,可以用于聚合统计、排序等操作。
- 但不支持全文搜索的语法,只能进行精确匹配查询。
- 适用于字段的值是明确的关键词,如状态、品类等属性字段。
总结:
- text 用于全文搜索, Keyword 用于聚合和过滤。
- text 可以模糊匹配,keyword 只能精确匹配。
- text 会进行分词,keyword 作为一个整体索引。
选择合适的字段类型对索引和查询效果都很重要。
删除索引
bash
DELETE /megacorp