文章目录
- 操作语句
-
- 索引操作:
-
- 1、创建索引 (Create an Index)
- 2、查看索引 (Get Index Information)
- 3、更新索引设置 (Update Index Settings)
- 4、删除索引 (Delete an Index)
- [5、删除索引中的所有数据(Delete By Query)](#5、删除索引中的所有数据(Delete By Query))
- 6、关闭索引 (Close an Index)
- 7、打开索引 (Open an Index)
- 数据查询
-
- [1、Match Query](#1、Match Query)
- [2、Match Phrase 查询](#2、Match Phrase 查询)
- [3、Range 查询](#3、Range 查询)
- [4、Bool 查询](#4、Bool 查询)
- [5、Term 查询](#5、Term 查询)
- [6、Terms 查询](#6、Terms 查询)
- [7、Exists 查询](#7、Exists 查询)
- [8、Wildcard 查询](#8、Wildcard 查询)
- [9、Prefix 查询](#9、Prefix 查询)
- [10、Fuzzy 查询](#10、Fuzzy 查询)
- [11、Query String 查询](#11、Query String 查询)
- [12、Multi-Match 查询](#12、Multi-Match 查询)
- [13、Geo-空间查询(Geospatial Queries)](#13、Geo-空间查询(Geospatial Queries))
- 14、聚合 (Aggregations)
- 15、Highlighting(高亮)
- 16、Suggesters(建议器)
- 17、Scripting(脚本)
- 小结
概要
基本上这些,有需要的再补充:
创建索引时的关键字段
- number_of_shards: 索引中主分片的数量,决定了数据分布的广度和横向扩展的能力。一旦设置好之后不能改变。
- number_of_replicas: 每个主分片拥有的副本分片的数量,用于提供数据冗余和提高查询的并发能力。
- mappings: 定义索引中字段名和字段数据类型的容器,可以看作是Elasticsearch中的"表结构"。
文档操作中的关键字段
- _doc: 表示文档类型,在7.x之前的版本中Elasticsearch支持多种类型,但在7.x之后已被弃用,统一使用_doc。
- _update: 用于更新现存文档的关键字。
- doc: 在更新操作中,表示需要被更新的字段和它们新的值。
查询操作中的关键字段
- query: 包含了所有查询条件的容器。
- match: 一个全文搜索的查询,匹配指定字段中包含的文本。
- term: 用于精确值匹配,不分析字段内容,用于不分词的字段或精确值查询。
- bool: 用于组合多个查询子句,并可以通过must(必须匹配)、should(至少匹配一个)、must_not(必须不匹配)、filter(过滤且不计算得分)等来定义查询逻辑。
- filter: 类似于查询,但它不计算得分而只是过滤数据,这通常有助于提高性能。
- range: 用于匹配指定字段值处于特定范围的文档。
- gte, lte: 分别代表范围查询中的"大于等于"和"小于等于"。
分页和排序中的关键字段
- from: 用于分页,表示从哪个文档开始返回。
- size: 也用于分页,表示返回多少个查询结果。
- sort: 用于指定根据哪个字段以什么样的顺序来排序结果。
高亮查询的关键字段
- highlight: 用于配置结果高亮显示的容器。
- fields: 指定哪些字段需要高亮显示。
聚合操作的关键字段
- aggs (或aggregations): 用于配置聚合操作的容器。
- terms: 一个典型的桶(buckets)聚合,用来创建基于某个字段的不同值的桶。
- avg, sum, min, max: 各种度量聚合类型,用来计算平均值、求和、最小值、最大值等。
每个字段和字段名在Elasticsearch查询DSL中都有特定的目的和行为。查询的编写需要对这些关键字段及其用法有深刻的了解。在构造查询时,这些字段以JSON对象的形式组合在一起,形成对Elasticsearch数据的精确和高效查询。
操作语句
索引操作:
1、创建索引 (Create an Index)
java
PUT /my_index // 使用PUT动作创建一个名为"my_index"的索引
{
"settings": { // "settings"类别用于设定索引相关的具体配置
"number_of_shards": 1, // "number_of_shards"指定了索引分片的数量
"number_of_replicas": 1 // "number_of_replicas"指定了每个分片的副本数量
},
"mappings": { // "mappings"类别用于定义索引中字段的名称和类型
"properties": { // "properties"定义了索引包含的字段及其数据类型
"title": { "type": "text" }, // "title": 字段名,类型为"text",适用于全文搜索
"date": { "type": "date" }, // "date": 字段名,类型为"date",存储日期
"views": { "type": "integer" } // "views": 字段名,类型为"integer",存储整数
}
}
}
2、查看索引 (Get Index Information)
java
GET /my_index // 使用GET动作获取名为"my_index"的索引信息
3、更新索引设置 (Update Index Settings)
java
PUT /my_index/_settings // 使用PUT动作更新名为"my_index"的索引设置
{
"settings": {
"number_of_replicas": 2 // "number_of_replicas"更新索引副本的数量为2
}
}
4、删除索引 (Delete an Index)
java
DELETE /my_index // 使用DELETE动作删除名为"my_index"的索引
5、删除索引中的所有数据(Delete By Query)
java
POST /my_index/_delete_by_query // 使用POST动作删除满足查询条件的索引内数据
{
"query": { // "query"定义删除操作的查询条件
"match_all": {} // "match_all"查询匹配索引中的所有文档,即删除所有数据
}
}
6、关闭索引 (Close an Index)
java
POST /my_index/_close // 使用POST动作关闭名为"my_index"的索引
7、打开索引 (Open an Index)
java
POST /my_index/_open // 使用POST动作打开名为"my_index"的索引
这些基本操作是管理Elasticsearch索引的关键。创建索引时,可以定义索引的结构和行为,例如分片数量、副本数量,以及字段的类型。更新设置,删除索引中的数据,以及整个索引的删除,都是索引生命周期的常见操作。通过这些操作,你可以维护、优化或删除存储在Elasticsearch集群中的数据。
数据查询
1、Match Query
进行全文搜索,会对查询的文本进行分词。
java
GET /my_index/_search
{
"query": { // "query"部分定义了查询的条件
"match": { // "match"查询用于全文搜索,支持文本分析
"field_name": "text to search" // "field_name"是你希望搜索的字段,后面是搜索的文本
}
}
}
2、Match Phrase 查询
搜索与指定短语匹配的文档,保留短语中词语的相对位置。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"match_phrase": { // "match_phrase"用于精确短语匹配,考虑词组内的词语顺序
"field_name": "exact phrase" // "field_name"指定字段,"exact phrase"为要匹配的短语
}
}
}
3、Range 查询
对数值或日期字段进行范围查询。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"range": { // "range"查询检索指定范围内的值
"field_name": { // "field_name"是你想要检索范围的字段
"gte": 10, // "gte"代表大于等于10
"lte": 20 // "lte"代表小于等于20
}
}
}
}
4、Bool 查询
组合多个查询条件,支持must(必须)、should(至少一个)和must_not(必须不)关键字。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"bool": { // "bool"查询组合多个查询条件
"must": [ // "must"关键字表示条件必须匹配
{ "match": { "field1": "value1" } }
],
"should": [ // "should"关键字表示至少一个条件应该匹配
{ "term": { "field2": "value2" } }
],
"must_not": [ // "must_not"关键字表示条件必须不匹配
{ "range": { "field3": { "gt": "value3" } } }
]
}
}
}
5、Term 查询
对字段进行精确匹配。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"term": { // "term"查询执行精确匹配
"field_name": "exact_value" // "field_name"是要匹配的字段; "exact_value"是精确查询的精确值,通常用于keyword标签或其他不分析的文本字段
}
}
}
6、Terms 查询
针对一个字段匹配多个精确值。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"terms": { // "terms"查询可用于一个字段匹配多个值
"field_name": ["value1", "value2"] // "field_name"是要匹配的字段; 数组包含所有要匹配的精确值
}
}
}
7、Exists 查询
查询指定字段中有值的文档。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"exists": { // "exists"查询找出指定字段有值的文档
"field": "field_name" // "field"字段名说明哪个字段必须有值
}
}
}
8、Wildcard 查询
进行通配符搜索,允许使用星号(*)和问号(?)作为通配符,星号代表零个或多个字符,问号代表一个字符。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"wildcard": { // "wildcard"查询支持使用通配符进行搜索
"field_name": "te*t?" // "field_name"是要搜索的字段; "te*t?"示例中,搜索以"te"开头以一个任意字符结束,中间有任意多个字符的文本
}
}
}
9、Prefix 查询
查找具有指定前缀的字段值。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"prefix": { // "prefix"查询用于查找具有指定前缀的字段值
"field_name": "prefix_value" // "field_name"是字段名; "prefix_value"是需要匹配的前缀
}
}
}
10、Fuzzy 查询
允许查询与指定的模糊匹配值相近的词。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"fuzzy": { // "fuzzy"查询允许错误拼写(Levenshtein 编辑距离)
"field_name": { // "field_name"是字段名
"value": "text", // "value"指定要搜索的近似值
"fuzziness": "AUTO" // "fuzziness"定义模糊程度,"AUTO"将自动根据长度选择距离
}
}
}
}
11、Query String 查询
支持直接输入复杂查询字符串,包含各类操作符。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"query_string": { // "query_string"支持直接传入查询表达式
"default_field": "field_name", // "default_field"指定默认查询字段
"query": "(new york city) OR (big apple)" // "query"中定义复杂查询字符串
}
}
}
12、Multi-Match 查询
在多个字段上执行相同的查询条件。
java
GET /my_index/_search
{
"query": { // "query"定义查询条件
"multi_match": { // "multi_match"在多个字段上进行文本搜索
"query": "search text", // "query"是要匹配的文本
"fields": ["field1", "field2^3"] // "fields"定义了多个字段,给"field2"一个更高的权重(3)
}
}
}
Elasticsearch 提供了多种查询类型和相关参数,使得用户能够根据具体的需求灵活地构建查询。每个查询类型针对不同的使用场景和需求,从简单的文本匹配到基于地理位置和其他高级功能,为数据检索提供了广泛的可能性。
继续介绍一些更高级或特殊用途的查询类型:
13、Geo-空间查询(Geospatial Queries)
java
GET /my_index/_search
{
"query": {
"geo_distance": { // "geo_distance"查询基于地理位置的距离查询
"distance": "200km", // "distance"指定查询范围的距离
"location": { // "location"是存储地理坐标的字段
"lat": 40.73,
"lon": -74.1
}
}
}
}
14、聚合 (Aggregations)
对数据进行统计分析。
java
GET /my_index/_search
{
"size": 0, // "size": 0表示不返回查询结果,仅返回聚合结果
"aggs": { // "aggs"定义了聚合操作
"popular_tags": { // "popular_tags"自定义该聚合操作的名称
"terms": { // "terms"聚合为桶聚合,统计字段中出现的唯一值
"field": "tags" // "field"指定了要执行聚合统计的字段
}
}
}
}
15、Highlighting(高亮)
返回查询结果时突出显示匹配的字符串。
java
GET /my_index/_search
{
"query": {
"match": {
"content": "search term"
}
},
"highlight": { // "highlight"指定了需要高亮的字段
"fields": {
"content": {} // "content"是文档内的一个字段,将会被高亮显示匹配的部分
}
}
}
16、Suggesters(建议器)
提供基于输入文本的建议。
java
GET /my_index/_search
{
"suggest": { // "suggest"定义了建议查询
"text": "tring out elasticsearch", // "text"定义了要被纠正或提出建议的文本
"simple_phrase": { // "simple_phrase"是自定义的建议器名称
"phrase": { // "phrase"定义了词组建议器类型,用于纠正文本片段
"field": "content" // "field"指定了用于生成建议的字段
}
}
}
}
17、Scripting(脚本)
使用脚本进行动态计算。
java
GET /my_index/_search
{
"query": {
"script_score": { // "script_score"查询允许基于脚本表达式调整得分
"query": { "match_all": {} }, // "query"定义了基础查询
"script": { // "script"定义了用于调整查询得分的脚本
"source": "math.log(_score * 2) + params.my_modifier", // "source"脚本本身
"params": { // "params"定义了传递给脚本的参数
"my_modifier": 0.1
}
}
}
}
}
这只是Elasticsearch提供的查询功能中的一小部分。Elasticsearch查询DSL非常灵活和强大,支持各种条件和结构复杂的查询,满足几乎所有搜索需求。学习和掌握Elasticsearch查询DSL是进行高效数据检索不可或缺的。
小结
没什么结的,就是个API用就行了