查询(term):被查询词不会被分词,作为关键字查询
GET /users/_doc/_search
{
"query": {
"term": {
"name":{
"value": "张三"
}
}
}
}
范围查询(range)
GET /users/_doc/_search
{
"query":{
"range":{
"age":{
"gt": 20,
"lt": 30
}
}
}
}
前缀查询(prefix):匹配不被分词的前缀或者
是text类型被分词之后的每个词前缀匹配
GET /users/_doc/_search
{
"query":{
"prefix":{
"address":{
"value": "南"
}
}
}
}
通配符查询(wildcard):匹配符?只能匹配一个,*匹配0或者多个
不会不分词的类型(除text)直接匹配,text类型匹配被分词之后的所有词
GET /users/_doc/_search
{
"query":{
"wildcard":{
"id":{
"value": "1*"
}
}
}
}
_id查询(ids):根据_id查询
GET /users/_doc/_search
{
"query":{
"ids":{
"values":["1","-1lVUX0BO8r8S-6T4tkD"]
}
}
}
模糊查询(fuzzy):与mysql的模糊查询截然不同
当查询词长度为小于等于2,不允许模糊查 0
当查询词长度为3到5之间,许模糊查 0、1
当查询词长度为大于5,不允许模糊查 0、1、2
参数
fuzziness
:允许有几个字符的偏差
prefix_length
:指定前几个字符不允许出现偏差
max_expansions
:匹配的结果数(默认50)
GET /users/_doc/_search
{
"query":{
"fuzzy":{
"description": {
"value": "elasticsearch"
#"value": "elasticsoarch" 1
#"value": "elasticsoorch" 2
#"value": "elasticsoooch" 3查不到
#"value": "el" 0
#"value": "elast" 0
#"value": "elost" 1
#"value": "eloot" 2 查不到
}
}
}
}
布尔查询(bool):实现复杂查询
must:&&
should:||
must_not:!
查询名字中含张并且年龄大于30
#查询名字中含张并且年龄大于30
GET /users/_doc/_search
{
"query":{
"bool":{
"must":[
{
"term":{
"name": "张"
}
},
{
"range":{
"age":{
"gt":30
}
}
}
]
}
}
}
#查询名字中含张或者年龄大于20
#查询名字中含张或者年龄大于20
GET /users/_doc/_search
{
"query":{
"bool":{
"should":[
{
"term":{
"name": "张"
}
},
{
"range":{
"age":{
"gt":30
}
}
}
]
}
}
}
#查询名字中不含张并且年龄不大于30
#查询名字中不含张并且年龄不大于30
GET /users/_doc/_search
{
"query":{
"bool":{
"must_not":[
{
"term":{
"name": "张"
}
},
{
"range":{
"age":{
"gt":30
}
}
}
]
}
}
}
可以做更复杂的嵌套
查询姓名含张或者年龄大于30或者(姓名含李并且年龄大于20)
#查询姓名含张或者年龄大于30或者(姓名含李并且年龄大于20)
GET /users/_doc/_search
{
"query":{
"bool":{
"should":[
{
"term":{
"name": "张"
}
},
{
"range":{
"age":{
"gt":30
}
}
},
{
"bool":{
"must":[
{
"term":{
"name":"李"
}
},
{
"range":{
"age":{
"gt": 20
}
}
}
]
}
}
]
}
}
}
高亮(highlight):注意并不会修改原数据,而是会在搜索结果中新加一个属性
GET /users/_doc/_search
{
"query":{
"term":{
"address": {
"value": "南"
}
}
},
"highlight":{
"fields":{
#指定字段,因为不同字段可能会有相同的查询词
"*":{} #*表示所有
#"address":{}
}
}
}
GET /users/_doc/_search
{
"query":{
"term":{
"address": {
"value": "南"
}
}
},
"highlight":{
"fields":{
"*":{}
#"address":{}
},
#自定义高亮标签
"pre_tags": ["<span style='color: red'>"],
"post_tags": ["</span>"]
}
}
多字段查询(multi_match)
#name是text类型(可以分词),"小10"会被分词后与name字段查询
#id是keyword不能分词,"小10"就做为keyword与id字段查询
GET /users/_doc/_search
{
"query":{
"multi_match":{
"query": "小10",
"fields": ["name","id"]
}
}
}
多字段分词查询(query_string):可以指定分词器
GET /users/_doc/_search
{
"query":{
"query_string":{
"query": "小10",
#默认查询字段
"default_field": "name"
#指定查询字段
#"fields": ["name","id"]
#指定分词
#"analyzer": "ik_max_word"
}
}
}