精准匹配检索(Exact Match)
1.检索分类
1.1 精准匹配检索(Exact Match)
Term
Terms
Range
Exists
Prefix
Wildcard
Regexp
Ids
1.2 全文检索(Full Text Search)
Match
Match Phrase
Match Phrase Prefix
Multi Match
Query String
Simple Query String
1.3 复合检索(Compound Queries)
Bool
Boosting
Constant Score
Dis Max
Function Score
1.4 特殊检索
Nested Query
(嵌套查询)Geo Query
(地理空间查询)Script Query
(脚本查询)More Like This Query
(相似文档查询)
2.精准匹配检索案例集
2.1 准备测试数据
创建一个索引。
PUT /products
{
"mappings": {
"properties": {
"name": {"type": "text", "fields": {"keyword": {"type": "keyword"}}},
"price": {"type": "double"},
"category": {"type": "keyword"},
"tags": {"type": "keyword"},
"description": {"type": "text"},
"stock": {"type": "integer"},
"sku": {"type": "keyword"},
"created_at": {"type": "date"},
"metadata": {"type": "object"}
}
}
}
插入测试数据。
POST /products/_bulk
{"index":{}}
{"name":"Laptop X1","price":1299.99,"category":"electronics","tags":["new","sale"],"description":"High performance laptop","stock":50,"sku":"LP-X1-2023","created_at":"2023-01-15","metadata":{"weight":1.5,"color":"silver"}}
{"index":{}}
{"name":"Smartphone S10","price":899.99,"category":"electronics","tags":["new","popular"],"description":"Latest smartphone model","stock":120,"sku":"SP-S10-2023","created_at":"2023-02-20","metadata":{"weight":0.3,"color":"black"}}
{"index":{}}
{"name":"Wireless Headphones","price":199.99,"category":"audio","tags":["sale","popular"],"description":"Noise cancelling headphones","stock":75,"sku":"WH-200-2022","created_at":"2022-11-10","metadata":{"weight":0.25,"color":"white"}}
{"index":{}}
{"name":"Smart Watch","price":249.99,"category":"wearables","tags":["new","featured"],"description":"Fitness tracking smartwatch","stock":30,"sku":"SW-500-2023","created_at":"2023-03-05","metadata":{"weight":0.1,"color":"black"}}
{"index":{}}
{"name":"4K TV","price":1499.99,"category":"electronics","tags":["premium","large"],"description":"55-inch 4K television","stock":15,"sku":"TV-4K-55-2023","created_at":"2023-01-25","metadata":{"weight":18.5,"color":"black"}}
{"index":{}}
{"name":"Bluetooth Speaker","price":129.99,"category":"audio","tags":["portable"],"description":"Waterproof bluetooth speaker","stock":60,"sku":"BS-100-2022","created_at":"2022-12-15","metadata":{"weight":0.8,"color":"blue"}}
{"index":{}}
{"name":"Gaming Mouse","price":79.99,"category":"accessories","tags":["gaming"],"description":"High DPI gaming mouse","stock":90,"sku":"GM-X200","created_at":"2023-02-01","metadata":{"weight":0.12,"color":"rgb"}}
{"index":{}}
{"name":"External SSD 1TB","price":159.99,"category":"storage","tags":["fast","reliable"],"description":"Portable SSD drive","stock":45,"sku":"ESSD-1TB-2023","created_at":"2023-03-10","metadata":{"weight":0.05,"color":"gray"}}
{"index":{}}
{"name":"Keyboard Pro","price":109.99,"category":"accessories","tags":["ergonomic"],"description":"Mechanical keyboard","stock":25,"sku":"KB-PRO-2023","created_at":"2023-03-15","metadata":{"weight":1.1,"color":"black"}}
{"index":{}}
{"name":"Tablet T8","price":499.99,"category":"electronics","tags":["new","portable"],"description":"10-inch tablet","stock":40,"sku":"TAB-T8-2023","created_at":"2023-02-28","metadata":{"weight":0.5,"color":"silver"}}
{"index":{}}
{"name":"Camera DSLR","price":899.99,"category":"photography","tags":["professional"],"description":"24MP DSLR camera","stock":20,"sku":"CAM-DSLR-24","created_at":"2023-01-10","metadata":{"weight":0.7,"color":"black"}}
{"index":{}}
{"name":"Monitor 27\"","price":299.99,"category":"electronics","tags":["office"],"description":"27-inch office monitor","stock":35,"sku":"MON-27-2023","created_at":"2023-02-15","metadata":{"weight":4.2,"color":"black"}}
2.2 各种精准匹配检索案例
2.2.1 Term Query - 精确值匹配
查找类别(category
)精确为 electronics
的产品。
GET /products/_search
{
"query": {
"term": {
"category": "electronics"
}
}
}
2.2.2 Terms Query - 多值精确匹配
查找类别为 electronics
或 audio
的产品。
GET /products/_search
{
"query": {
"terms": {
"category": ["electronics", "audio"]
}
}
}
2.2.3 Range Query - 范围查询
查找价格在 100 100 100 到 300 300 300 之间的产品。
GET /products/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 300
}
}
}
}
2.2.4 Exists Query - 存在性查询
查找有 metadata.color
字段的产品。
GET /products/_search
{
"query": {
"exists": {
"field": "metadata.color"
}
}
}
2.2.5 Prefix Query - 前缀查询
查找 sku
以 SP
开头的产品(智能手机)。
GET /products/_search
{
"query": {
"prefix": {
"sku": "SP"
}
}
}
2.2.6 Wildcard Query - 通配符查询
查找 sku
格式为 *-2023
的产品(2023 年产品)。
GET /products/_search
{
"query": {
"wildcard": {
"sku": {
"value": "*-2023"
}
}
}
}
2.2.7 Regexp Query - 正则表达式查询
查找颜色为 black
或 blue
的产品(使用正则表达式)。
GET /products/_search
{
"query": {
"regexp": {
"metadata.color": "bl(a|u)(ck|e)"
}
}
}
2.2.8 Ids Query - ID 查询
根据文档 ID 查询特定文档。
GET /products/_search
{
"query": {
"ids": {
"values": ["KWgilpcB9mA5oeTvIj0n", "KmgilpcB9mA5oeTvIj0n"]
}
}
}
2.2.9 Terms Set Query - 最小匹配项查询
查找至少匹配指定标签中 2 个的产品。
GET /products/_search
{
"query": {
"terms_set": {
"tags": {
"terms": ["new", "sale", "popular"],
"minimum_should_match_script": {
"source": "2"
}
}
}
}
}
2.2.10 Fuzzy Query - 模糊查询
查找名称类似于 Lapotp
的产品(容忍拼写错误)。
GET /products/_search
{
"query": {
"fuzzy": {
"name.keyword": {
"value": "Lapotp X1",
"fuzziness": "AUTO"
}
}
}
}
最佳实践建议
- 默认的
fuzziness="AUTO"
允许的最大编辑距离是 2 2 2。- 对文本内容使用
text
类型字段进行模糊搜索。- 对精确匹配的标识符使用
keyword
类型。- 模糊查询时:
- 对于短词( ≤ 5 ≤5 ≤5 字符):
fuzziness=1
- 中等长度( 6 − 10 6-10 6−10 字符):
fuzziness=2
- 长词( > 10 >10 >10 字符):
fuzziness=3
2.3 复合精准查询示例
查询条件如下:
- 类别为
electronics
- 价格 ≥ 500 ≥500 ≥500
- 有颜色元数据
- 且不是
2022
年产品(sku
不以-2022
结尾)
GET /products/_search
{
"query": {
"bool": {
"must": [
{ "term": { "category": "electronics" } },
{ "range": { "price": { "gte": 500 } } },
{ "exists": { "field": "metadata.color" } }
],
"must_not": [
{ "wildcard": { "sku": "*-2022" } }
]
}
}
}
3.精准匹配检索与全文检索的区别
特性 | 精准匹配检索 | 全文检索 |
---|---|---|
匹配方式 | 精确匹配字段的完整值 | 对文本进行分析后匹配 |
分析器处理 | 不经过分析器处理 | 经过分析器处理(分词、大小写转换等) |
大小写敏感 | 通常敏感 | 通常不敏感(取决于分析器配置) |
适用场景 | 结构化数据(如 ID、状态码、标签等) | 非结构化文本(如文章内容、描述等) |
查询示例 | {"term": {"status": "published"}} | {"match": {"content": "elasticsearch tutorial"}} |
性能 | 通常更快(使用倒排索引直接查找) | 相对较慢(需要分析查询文本) |
评分机制 | 通常返回固定分数 | 基于相关性评分 |
部分匹配 | 不支持 | 支持(取决于分析器) |