基本上这些,有需要的再补充:
每个字段和字段名在Elasticsearch查询DSL中都有特定的目的和行为。查询的编写需要对这些关键字段及其用法有深刻的了解。在构造查询时,这些字段以JSON对象的形式组合在一起,形成对Elasticsearch数据的精确和高效查询。
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",存储整数
}
}
}
GET /my_index // 使用GET动作获取名为"my_index"的索引信息
PUT /my_index/_settings // 使用PUT动作更新名为"my_index"的索引设置
{
"settings": {
"number_of_replicas": 2 // "number_of_replicas"更新索引副本的数量为2
}
}
DELETE /my_index // 使用DELETE动作删除名为"my_index"的索引
POST /my_index/_delete_by_query // 使用POST动作删除满足查询条件的索引内数据
{
"query": { // "query"定义删除操作的查询条件
"match_all": {} // "match_all"查询匹配索引中的所有文档,即删除所有数据
}
}
POST /my_index/_close // 使用POST动作关闭名为"my_index"的索引
POST /my_index/_open // 使用POST动作打开名为"my_index"的索引
这些基本操作是管理Elasticsearch索引的关键。创建索引时,可以定义索引的结构和行为,例如分片数量、副本数量,以及字段的类型。更新设置,删除索引中的数据,以及整个索引的删除,都是索引生命周期的常见操作。通过这些操作,你可以维护、优化或删除存储在Elasticsearch集群中的数据。
进行全文搜索,会对查询的文本进行分词。
GET /my_index/_search
{
"query": { // "query"部分定义了查询的条件
"match": { // "match"查询用于全文搜索,支持文本分析
"field_name": "text to search" // "field_name"是你希望搜索的字段,后面是搜索的文本
}
}
}
搜索与指定短语匹配的文档,保留短语中词语的相对位置。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"match_phrase": { // "match_phrase"用于精确短语匹配,考虑词组内的词语顺序
"field_name": "exact phrase" // "field_name"指定字段,"exact phrase"为要匹配的短语
}
}
}
对数值或日期字段进行范围查询。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"range": { // "range"查询检索指定范围内的值
"field_name": { // "field_name"是你想要检索范围的字段
"gte": 10, // "gte"代表大于等于10
"lte": 20 // "lte"代表小于等于20
}
}
}
}
组合多个查询条件,支持must(必须)、should(至少一个)和must_not(必须不)关键字。
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" } } }
]
}
}
}
对字段进行精确匹配。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"term": { // "term"查询执行精确匹配
"field_name": "exact_value" // "field_name"是要匹配的字段; "exact_value"是精确查询的精确值,通常用于keyword标签或其他不分析的文本字段
}
}
}
针对一个字段匹配多个精确值。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"terms": { // "terms"查询可用于一个字段匹配多个值
"field_name": ["value1", "value2"] // "field_name"是要匹配的字段; 数组包含所有要匹配的精确值
}
}
}
查询指定字段中有值的文档。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"exists": { // "exists"查询找出指定字段有值的文档
"field": "field_name" // "field"字段名说明哪个字段必须有值
}
}
}
进行通配符搜索,允许使用星号(*)和问号(?)作为通配符,星号代表零个或多个字符,问号代表一个字符。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"wildcard": { // "wildcard"查询支持使用通配符进行搜索
"field_name": "te*t?" // "field_name"是要搜索的字段; "te*t?"示例中,搜索以"te"开头以一个任意字符结束,中间有任意多个字符的文本
}
}
}
查找具有指定前缀的字段值。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"prefix": { // "prefix"查询用于查找具有指定前缀的字段值
"field_name": "prefix_value" // "field_name"是字段名; "prefix_value"是需要匹配的前缀
}
}
}
允许查询与指定的模糊匹配值相近的词。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"fuzzy": { // "fuzzy"查询允许错误拼写(Levenshtein 编辑距离)
"field_name": { // "field_name"是字段名
"value": "text", // "value"指定要搜索的近似值
"fuzziness": "AUTO" // "fuzziness"定义模糊程度,"AUTO"将自动根据长度选择距离
}
}
}
}
支持直接输入复杂查询字符串,包含各类操作符。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"query_string": { // "query_string"支持直接传入查询表达式
"default_field": "field_name", // "default_field"指定默认查询字段
"query": "(new york city) OR (big apple)" // "query"中定义复杂查询字符串
}
}
}
在多个字段上执行相同的查询条件。
GET /my_index/_search
{
"query": { // "query"定义查询条件
"multi_match": { // "multi_match"在多个字段上进行文本搜索
"query": "search text", // "query"是要匹配的文本
"fields": ["field1", "field2^3"] // "fields"定义了多个字段,给"field2"一个更高的权重(3)
}
}
}
Elasticsearch 提供了多种查询类型和相关参数,使得用户能够根据具体的需求灵活地构建查询。每个查询类型针对不同的使用场景和需求,从简单的文本匹配到基于地理位置和其他高级功能,为数据检索提供了广泛的可能性。
继续介绍一些更高级或特殊用途的查询类型:
GET /my_index/_search
{
"query": {
"geo_distance": { // "geo_distance"查询基于地理位置的距离查询
"distance": "200km", // "distance"指定查询范围的距离
"location": { // "location"是存储地理坐标的字段
"lat": 40.73,
"lon": -74.1
}
}
}
}
对数据进行统计分析。
GET /my_index/_search
{
"size": 0, // "size": 0表示不返回查询结果,仅返回聚合结果
"aggs": { // "aggs"定义了聚合操作
"popular_tags": { // "popular_tags"自定义该聚合操作的名称
"terms": { // "terms"聚合为桶聚合,统计字段中出现的唯一值
"field": "tags" // "field"指定了要执行聚合统计的字段
}
}
}
}
返回查询结果时突出显示匹配的字符串。
GET /my_index/_search
{
"query": {
"match": {
"content": "search term"
}
},
"highlight": { // "highlight"指定了需要高亮的字段
"fields": {
"content": {} // "content"是文档内的一个字段,将会被高亮显示匹配的部分
}
}
}
提供基于输入文本的建议。
GET /my_index/_search
{
"suggest": { // "suggest"定义了建议查询
"text": "tring out elasticsearch", // "text"定义了要被纠正或提出建议的文本
"simple_phrase": { // "simple_phrase"是自定义的建议器名称
"phrase": { // "phrase"定义了词组建议器类型,用于纠正文本片段
"field": "content" // "field"指定了用于生成建议的字段
}
}
}
}
使用脚本进行动态计算。
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用就行了