elasticsearch笔记——词项查询

本文详细介绍Elasticsearch中多种高级查询方式,包括term、terms、range、exists、prefix、wildcardquery、regexp、fuzzyquery、ids等,每种查询方式均附有示例,帮助读者理解和掌握Elasticsearch的复杂查询能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      全文搜索在执行查询之前会分析查询字符串,词项查询之前不会对查询字符串分词解析。词项查询通常用于结构化数据,比如数字、日期和枚举类。

一、term

      term query 用于词项搜索,查询之前不会对查询字符串进行分词解析,查询参数也不允许指定分词器。

{
	"query": {
		"term": {
			"title": "程序"
		}
	}
}

二、terms

      terms 查询是 term 查询的升级,可以用来查询文档中包含多个词的文档。

{
	"query": {
		"terms": {
			"title": ["程序","性能"]
		}
	}
}
查询title字段中包含 “程序” 或者 “性能”的文档

三、range

      range query 查询用于匹配在某一范围内的数值型、日期类型或者字符串类型字段的文档。range 查询只能查询一个字段,不能同时作用于多个字段。

range 查询支持的参数:
gt:大于
gte:大于等于
lt:小于
lte: 小于等于

{
	"query": {
		"range": {
			"price": {
				"gte": 50,
				"lte": 60
			}
		}
	}
}
查询价格字段的值大于等于50并且小于等于60的文档。

四、exists

      exists 查询会返回字段中至少有一个非空值的文档。

{
    "exists": {
        "field": "user"
    }
}
查询存在user字段并且值不为空的文档。

以下文档会匹配上面的查询:
(1) {"user":"jane"}
(2) {"user":""}
(3) {"user":"-"}
(4) {"user":["jane"]}
(5) {"user":["jane",null]}

以下文档不会匹配上面的查询:
(1) {"user":null}
(2) {"user":[]}
(3) {"user":[null]}
(4) {"foo":"bar"} 没有user字段

五、prefix

      prefix 查询用于查询某个字段的内容包含以查询字符串为前缀的关键词的文档。

{
	"query": {
		"prefix": {
			"title": "java"
		}
	}
}
查询 title字段中含有以java为前缀的关键词的文档

六、wildcard query

      通配符查询,支持单字符通配符和多字符通配符。? 用来匹配一个任意字符;* 用来匹配另个或者多个字符。

七、regexp

      正则表达式查询,查询字符串是一个正则表达式。

{
    "query" : {
                "regexp" : { "text(查询字段)" : "正则表达式" }  
            }
}

八、fuzzy query

      fuzzy 查询是通过计算查询字符串与文档的编辑距离来得到结果,使用fuzzy需要小号的资源比较大,查询效率比高,适用于需要模糊查询的场景。

    比如:用户在输入查询关键词的时候不小心把“javascript” 输成了 “javascritp”,使用fuzzy查询任然可以查询到含有“javascript”的文档。

      编辑距离:是指两个字符串之间,有一个转成另一个所需要的最少编辑操作次数,也称为 Levenshtein 距离。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

九、ids

      ids 查询用于查询指定id的文档

{
	"query": {
		"ids": {
			"values": ["1","2","3"]
		}
	}
}

 

### Elasticsearch 8.x 版本学习笔记 #### 关键特性概述 Elasticsearch 是一款分布式搜索引擎,支持实时搜索、多租户等功能。其核心优势在于能够快速处理大量数据并提供高效的全文检索能力[^1]。 #### 安装与启动 对于初次使用者来说,可以从官方网站下载适合的操作系统版本进行安装。完成安装后通过命令行工具执行 `bin/elasticsearch` 启动服务实例。为了确保集群稳定运行,建议按照官方文档中的最佳实践来调整JVM参数和其他环境变量设置[^2]。 #### 创建索引及Mapping定义 创建一个新的索引时可以通过API指定名称以及配置文件路径: ```json PUT /my-index-000001 { "settings": { "index.number_of_shards": 3, "index.number_of_replicas": 2 }, "mappings": { "_source": { "enabled": true }, "properties": { "name": {"type": "keyword"}, "description": {"type": "text"} } } } ``` 此段代码展示了如何设定shard数量和副本数,并为特定字段指定了相应的类型——例如这里设置了`name`作为关键字型(`keyword`)而`description`则被设成文本型(`text`)[^3]。 #### 动态模板应用 当面对未知结构的数据源时,动态模板允许自动识别新加入字段的性质从而为其分配最恰当的数据表示形式。这极大地方便了灵活应对各种业务场景下的需求变化。 ```json PUT _template/my_template_1 { "index_patterns": ["te*", "bar*"], "priority": 1, "version": 5, "settings": {}, "aliases": {}, "mappings": { "dynamic_templates": [ { "strings_as_keywords": { "match_mapping_type": "string", "mapping": { "type": "keyword" } } } ] } } ``` 这段JSON片段说明了一个简单的动态模板案例,其中任何匹配模式下新增加字符串类型的字段都将默认转换成关键类型存储。 #### 正排索引 vs 倒排索引 正排索引指的是基于唯一标识符查找对应记录的方式;相反地,倒排索引则是依据某些特征值反向定位到拥有这些特性的所有条目集合之中。这种机制使得即使是在海量数据库里也能迅速实现精准查询操作[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值