查询文档
- 词条查询 term:不会分析查询条件,只有当词条和查询字符串完全匹配时才匹配搜索
- 全文查询 match:会分析查询条件,先将查询条件进行分词,然后查询,最后求并集
# term 词条查询。查询的条件字符串和词条要完全匹配
# field指要查询的字段,value指查询的条件字符串
GET person/_search
{
"query": {
"term": {
"address": {
"value": "北京"
}
}
}
}
注意:es默认使用的是standard分词器,会将“北京”分为“北”和“京”,所以这里通过term查“北京”是查不到的。
在设置了ik分词器的场景下用term进行查询
- 首先将在创建索引添加映射时,将要查询的address字段指定为使用ik分词器:
# 创建索引,添加映射,指定使用ik分词器
PUT person
{
"mappings": {
"properties": {
"name":{
"type": "keyword"
},
"address":{
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
- 添加文档
PUT person/_doc/id2
{
"name":"王五",
"address":"中国北京天门安"
}
- term查询
GET person/_search
{
"query": {
"term": {
"address": {
"value": "北京"
}
}
}
}
这里可以查到,因为ik分词器对“中国北京天安门”进行了分词,分词中有“北京”这个词,所以能和term中的“北京”完全匹配上。
但如果term查的是“北京昌平”,就查不到了,因为无法完全匹配。
- match查询
GET person/_search
{
"query": {
"match": {
"address": "北京昌平"
}
}
}
这里可以查到,因为match对北京昌平进行了分词,分词得到的“北京”成功匹配上了ik分词器对“中国北京天安门”进行分词得到的“北京”