准备数据
PUT /lib3
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 0
},
"mappings": {
"user":{
"properties": {
"name":{"type":"text"},
"address":{"type":"text"},
"age":{"type":"integer"},
"interests":{"type":"text"},
"birthday":{"type":"date"}
}
}
}
}
GET lib3
PUT /lib3/user/1
{
"name":"zhaoliu",
"address":"hei long jiang sheng tie ling shi",
"age":50,
"interests":"xi huan he jiu,duanlian,lvyou",
"birthday":"1970-12-12"
}
PUT /lib3/user/2
{
"name":"zhaoming",
"address":"bei jing hai dian qu qing he zhen",
"age":20,
"interests":"xi huan he jiu chang ge",
"birthday":"1998-10-12"
}
PUT /lib3/user/3
{
"name":"lisi",
"address":"bei jing hai dian qu qing he zhen",
"age":23,
"interests":"",
"birthday":"1998-10-12"
}
PUT /lib3/user/4
{
"name":"wangwu",
"address":"bei jing hai dian qu qing he zhen ",
"age":26,
"interests":"xi huan biancheng,tingyinyue,lvyou",
"birthday":"1995-10-12"
}
PUT /lib3/user/5
{
"name":"zhangsan",
"address":"bei jing chao yang qu",
"age":29,
"interests":"xi huan tingyinyue,changge,tiaowu",
"birthday":"1988-10-12"
}
一、简单的查询
GET /lib3/user/_search?q=name:lisi
GET /lib3/user/_search?q=interests:changge&sort=age
二、term查询和terms查询(精确查找)
term query会去倒排索引中查找确切的term,它并不知道分词器的存在,这种查询适合keyword、numeric、date。
term:查询某个字段里含有某个关键词的文档
GET /lib3/user/_search/
{
"query": {
"term": {
"name": "zhaoliu"
}
}
}
terms:查询某个字段里含有多个关键词文档
GET /lib3/user/_search
{
"from": 0,
"size": 2,
"version": true,
"query": {
"terms": {
"interests": ["hejiu","changge"]
}
}
}
三、match查询(非精确查找)
match query知道分词器的存在,会对filed进行分词操作,然后再查询
GET /lib3/user/_search
{
"query": {
"match": {
"name": "zhaoliu"
}
}
}
GET /lib3/user/_search
{
"query": {
"match": {
"name": "zhaoliu zhaoming"
}
}
}
match_all查询所有的文档
GET /lib3/user/_search
{
"query": {
"match_all": {}
}
}
multi_match:可以指定多个字段
GET /lib3/user/_search
{
"query": {
"multi_match": {
"query": "changge",
"fields": ["interests","name"]
}
}
}
match_phrase:短语匹配查询
GET /lib3/user/_search
{
"query": {
"match_phrase": {
"interests": "duanlian,changge"
}
}
字段控制_source
GET /lib3/user/_search
{
"_source": ["address","name"],
"query": {
"match": {
"name": "zhaoliu zhaoming"
}
}
}
字段控制include,excludes
GET /lib3/user/_search
{
"query": {
"match_all": {}
},
"_source": {
"includes": ["name","address"], // "includes": ["na*","addr*"],
"excludes": ["age","birthday"]
}
}
排序
GET /lib3/user/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc" //asc
}
}
]
}
前缀匹配
GET /lib3/user/_search
{
"query": {
"match_phrase_prefix": {
"name": "zhao"
}
}
}
范围查询
GET /lib3/user/_search
{
"query": {
"range": {
"birthday": {
"from": "1990-10-10",
"to": "2016-05-01"
}
}
}
}
wildcard查询
允许使用通配符*和?进行查询,*代表0个或多个 ?代表任意一个字符
GET /lib3/user/_search
{
"query": {
"wildcard": {
"name": "zhao*"
}
}
}
fuzzy模糊查询
GET /lib3/user/_search
{
"query": {
"fuzzy": {
"name": "zholiu"
}
}
}
高亮搜索
GET /lib3/user/_search
{
"query": {
"match": {
"interests": "changge"
}
},
"highlight": {
"fields": {"interests": {}}
}
}