elasticsearch 下面参数详细解释
java 搜索查询看官方文档
https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.8/connecting.html#_your_first_request
{"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"
}
这个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版本,以及集群名称等情况。
查看节点
GET /_cat/nodes
查看索引
GET /_cat/indices
创建索引
PUT /megacorp
添加文档
PUT megacorp/_doc/1
{"first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]
}
在 Elasticsearch 8.x 版本中,PUT 方法直接对文档 ID 进行索引操作已经被移除,不再支持这种用法。
测试已不支持
POST /megacorp/employee/_doc/2
创建后展示信息
{"_index": "megacorp","_id": "1","_version": 1,"result": "created","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 0,"_primary_term": 1
}
这个JSON对象包含了Elasticsearch执行索引文档操作后的响应信息,主要字段说明如下:
- _index: 文档被索引到的索引名。
- _id: 文档的ID。
- _version: 文档的版本号,文档被修改时版本号会+1。
- result: 操作结果,这里是created表示文档被创建。
- _shards: 分片信息。total为总分片数,successful为操作成功的分片数,failed为失败的分片数。
- _seq_no: 序列号,代表操作顺序。
- _primary_term: 主分片的任期(term)号,主分片发生变更时会增加。
获取es文档
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"]}
}
更新文档方式一
POST /megacorp/_update/1
{"doc": {"first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "music" ] }
}
更新返回值
{"_index": "megacorp","_id": "1","_version": 2,"result": "updated","_shards": {"total": 2,"successful": 2,"failed": 0},"_seq_no": 1,"_primary_term": 1
}
更新文档方式一
POST /megacorp/_update_by_query
{"script": {"source": "ctx._source.age += params.increment","params": {"increment": 1}},"query": {"match": {"first_name": "John"}}
}
搜索
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}}]}
}
获取索引文档数据结构
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 可以这样:
PUT /megacorp/_mapping
{"properties": {"first_name": {"type": "text"}}
}
删除索引
"type": "text","fields": {"keyword": {"type": "keyword",
在 Elasticsearch 中,text 和 keyword 是两种不同的字段类型(field types)。
text 类型:
- 它是全文字段,用于全文搜索。text 字段会进行分词,会分析字符串,转换成词的组合,建立索引。
- 支持模糊匹配、Phrase查询等全文搜索语法。
- 但不支持聚合(aggregation)操作,因为经过分词后进行了拆分。
- 适用于长文本、文章内容等需要全文搜索的字段。
keyword 类型:
- 它是精确值字段,会作为一个整体进行索引,不进行分词和分析。
- 支持聚合,可以用于聚合统计、排序等操作。
- 但不支持全文搜索的语法,只能进行精确匹配查询。
- 适用于字段的值是明确的关键词,如状态、品类等属性字段。
总结:
- text 用于全文搜索, Keyword 用于聚合和过滤。
- text 可以模糊匹配,keyword 只能精确匹配。
- text 会进行分词,keyword 作为一个整体索引。
选择合适的字段类型对索引和查询效果都很重要。
删除索引
DELETE /megacorp