1.term terms
term terms 查询是不会介入分词器的, 对查询关键词作为整体查询, 不会拆分, 这种查询适合有明确值的字段
1)term:查询某个字段里含有某个关键词的文档
查找name字段中含有"张三"的文档
"query":{
"term":{
"name":"张三"
}
}
2)terms : 查询某个字段里含有列出多个关键词中任一项的文档, 类似于SQL中in关键字的用法(或关系)
查找name字段中含有"张"或者"黄"的文档
"query":{
"terms":{
"name":["张","黄"]
}
}
2.match
match查询会介入分词器,会对查询关键词和字段field进行分词匹配
1)match : 分词查询, 查询某个字段里含有关键词分词结果中一个或多个的文档
张五会被分词,所以name中含有张或者五的都会被检索到
"query":{
"term":{
"name":"张五"
}
}
2)match all : 查询所有文档
"query":{
"match_all": {}
}
3)multi_match:可以指定查询多个field字段中含有查询关键词分词结果的文档
查询name或者memo中含有"张加"分词结果("张"或者"加")之一的
{
"query": {
"multi_match": {
"query" : "张加",
"fields": ["name","memo"]
}
}
}
4)match_phrase : 对关键词分词分析,这意味着字段必须包含分词结果中的所有分词,并且保证各个分词的相对位置不变
查询name字段必须包含"张三"分词结果的查询结果, 假设"张三"分词结果中包含"张"和"张三"等,那么在name为"张某三"的文档中会因为没有张三这个分词结果而不被检索到
"query" : {
"match_phrase":{
"name":"张三"
}
}
附录
一个查询请求体例子
{
"from": 0,
"size": 10,
"_source": ["age", "name", "memo"],
"sort": [{
"age": {
"order": "asc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"query": {
"bool": {
"must": {
"match": {
"name": "张三"
}
},
"filter": {
"range": {
"age": {
"gte": 10,
"lte": 30
}
}
}
}
},
"highlight": {
"pre_tags": ["<tag1>"],
"post_tags": ["</tag1>"],
"fields": {
"name": {}
}
}
}

网友评论