使用term query的弊端
GET books/_search
{
"query": {
"term": {
"title": {
"value": "java编程"
}
}
}
}
term query是完全匹配目标内容分词后的词项, 由于所有文档的title进行分词后都没有 ‘java编程’ 这个分词
这个时候就需要使用 match query
使用match query
GET books/_search
{
"query": {
"match": {
"title": "java编程"
}
}
}
原理: 因为match query会对查询语句中的内容进行分词, 此处为 “Java编程”, 分词之后再与文档中的分词进行比较有匹配到的就返回文档
添加operator进行与或操作
GET books/_search
{
"query": {
"match": {
"title": {
"query": "java编程思想",
"operator": "and"
}
}
}
}
这是and与操作, 含义是必须 match query分词后的所有词项在文档中对应字段所有分词都能包含才返回内容
match_phrase query
match_phrase query 在 match 的基础上加上了, 分词后的顺序必须一致的条件
GET books/_search
{
"query": {
"match_phrase": {
"title": "java编程"
}
}
}
比如 ‘Java编程’ 分词后为 java 编程, 那么文档中的分词也是要这个顺序
match_phrase_prefix query
match_phrase_prefix 在 match_phrase的基础上加入了最后一个词为term查询
GET books/_search
{
"query": {
"match_phrase_prefix": {
"title": "java 程"
}
}
}
结果:
分析: 前面java 是进行match_phrase匹配到java, 后面的程是必须匹配到紧接着java的词项以 ‘程’ 开头