Appearance
进阶查询与高亮
短语匹配(Match Phrase)
match_phrase 要求查询词在字段中按顺序、相邻出现,适合“完整短语”的检索。
http
GET /my_index/_search
{
"query": {
"match_phrase": {
"title": "Elasticsearch 入门"
}
}
}只有标题中按顺序出现 “Elasticsearch” 和 “入门” 且相邻(或间隔不大)的文档才会命中。
slop:允许间隔
slop 表示允许词与词之间最多“隔几个词”仍算匹配:
http
GET /my_index/_search
{
"query": {
"match_phrase": {
"title": {
"query": "入门 Elasticsearch",
"slop": 2
}
}
}
}slop 越大,越宽松,可能召回更多结果。
前缀、通配符与正则
- prefix:前缀匹配,不分词,适合 keyword。注意:前缀过长或基数大时可能较慢。
http
{ "query": { "prefix": { "author": "张" } } }- wildcard:通配符,
*表示任意字符,?表示单个字符。同样建议用于 keyword,且避免前缀通配(如*keyword)。
http
{ "query": { "wildcard": { "code": "A*1" } } }- regexp:正则匹配,灵活但性能成本高,慎用在大字段或大索引上。
模糊查询(Fuzzy)
fuzzy 可容忍一定拼写错误,通过编辑距离(Levenshtein)匹配:
http
GET /my_index/_search
{
"query": {
"fuzzy": {
"title": {
"value": "Elasticserch",
"fuzziness": "AUTO"
}
}
}
}fuzziness 可为 0、1、2 或 AUTO(根据词长自动选 0/1/2)。适合短词纠错,长词或中文需结合分词与场景评估。
高亮(Highlight)
在返回结果中把匹配到的词用标签包起来,便于前端展示“高亮片段”。
基本用法
在请求中加 highlight,指定要对哪些字段做高亮,以及可选标签:
http
GET /my_index/_search
{
"query": {
"match": { "title": "Elasticsearch" }
},
"highlight": {
"fields": {
"title": {},
"content": { "fragment_size": 150, "number_of_fragments": 3 }
},
"pre_tags": ["<em>"],
"post_tags": ["</em>"]
}
}- fields:键为字段名,值为配置对象。空对象
{}表示用默认设置。 - fragment_size:每个高亮片段的大致字符数。
- number_of_fragments:最多返回几个片段;为 0 表示返回整段。
- pre_tags / post_tags:高亮前后标签,默认是
<em>、</em>。
返回里每条 hit 会多一个 highlight 对象,键为字段名,值为带标签的片段数组。
高亮依赖该字段的分词结果,因此对 text 字段才有意义;对 keyword 通常要匹配整段才会高亮。
搜索建议(Suggesters)简介
Suggesters 用于补全、纠错、联想等,常见三种:
| 类型 | 用途 |
|---|---|
| Term Suggest | 基于编辑距离做词级纠错建议 |
| Phrase Suggest | 整句纠错,考虑上下文 |
| Completion Suggest | 前缀补全,常用于搜索框联想,需使用 completion 类型字段 |
使用方式都是在请求里加 suggest 节点,指定文本和 suggestion 类型。Completion 需要事先用 completion 类型建索引并写入建议词。详细语法见 官方文档。