term query与match query区别
term query 词匹配询问
match query 部分匹配询问
match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,而term query,输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-term-query.html
官方示例:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"full_text": {
// 没有特殊说明,查询时会分词
"type": "string"
},
"exact_value": {
"type": "string",
// 指明不使用分词
"index": "not_analyzed"
}
}
}
}
}
添加一条数据
PUT my_index/my_type/1
{
"full_text": "Quick Foxes!",
"exact_value": "Quick Foxes!"
}
由于full_text字段分词,因此在倒排索引中被默认标准分析器分为quick , foxes
exact_value字段不分词,在倒排索引中该字段的值仍为QuickFoxes!
执行查询
使用term查询exact_value,搜索内容为Quick Foxes!
// 由于exact_value不分词,Quick Foxes!与exact_value的值QuickFoxes!匹配,因此可以匹配
GET my_index/my_type/_search
{
"query": {
"term": {
"exact_value": "Quick Foxes!"
}
}
}
使用term查询full_text,搜索内容为Quick Foxes!
//由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用 Quick Foxes!匹配不到内容
GET my_index/my_type/_search
{
"query": {
"term": {
"full_text": "Quick Foxes!"
}
}
}
使用term查询full_text,搜索内容为foxes
// 由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,
// 因此使用 foxes可以匹配到
GET my_index/my_type/_search
{
"query": {
"term": {
"full_text": "foxes"
}
}
}
使用match查询full_text,查询内容为Quick Foxes!
// 使用match搜索,先分析搜索字符串Quick Foxes!,对它分词,
// 然后搜索full_text中含有quick或者foxes或者两者都包含的文档,
//由于full_text字在倒排索引中被分为quick和foxes,因此可以匹配到
GET my_index/my_type/_search
{
"query": {
"match": {
"full_text": "Quick Foxes!"
}
}
}
还没有评论,来说两句吧...