单个条件查询
使用请求路径方式
以get的方式发送请求,请求地址格式:
http://localhost:9200/索引名/_search?q=键:值
例如,查询base索引当中sex属性值为man的数据
http://localhost:9200/base/_search?q=sex:man
使用请求体的方式(推荐使用)
以get的方式发送请求
http://localhost:9200/base/_search
然后在body输入要查询的条件,选择json格式,输入也要是json格式的数据,最外层的键是选择查询,然后是查询的方式,最后是查询的条件,例如
{
"query"://查询
{
"match"://查询方式
{
"sex":"man"
}
}
}
{
"query"://查询
{
"match_all"://全量查询
{
}
}
}
多个条件查询
有多个条件同时成立,需要在body里面进行添加一个键名为bool的键值对,代表条件的意思,值是must或者should,filter,must表示同时成立,should表示或者,就是其中一个成立即可,filter表示范围,数值的范围条件,然后可以选择匹配查询,匹配查询的值是数组形式,表示多个条件同时成立,例如
{
"query": //查询
{
"bool": //条件
{
"must":[ //同时成立
{
"match": //条件1
{
"username": "zhangsan"
}
},
{
"match": //条件2
{
"age": 15
}
}
]
}
}
}
选择数值范围条件需要指定范围,哪个字段还有条件,例如
{
"query": //查询
{
"bool": //条件
{
"filter": //范围
{
"range":
{
"age": //字段
{
"gt":12 //大于12
}
}
}
}
}
}
全文检索和完全匹配查询
当保存文档数据时,ElasticSearch会将数据文字进行分词拆解操作,并将拆解后的数据保存到倒排索引当中,所以只用文字的一部分也能查询到数据,类似关系数据库的模糊查询,这种检索方式成为全文检索,match就是全文检索,如果想用完全匹配查询的话,就要使用match_phrase,就是关系数据库当中的=。
编辑查询结果格式
跟关系数据库一样,查询的结果可以规定范围,数据查询的起始位置,结果的排序,显示的字段。需要在body里面进行设置,范围用size设置,数据查询位置用from设置,排序用sort设置,显示的字段用_source设置,其中size和from是整数类型,sort要说明是哪个字段用怎样的方式进行排序,_source是数组类型,例如
{
"from":2,
"size":2,
"_source":["username"],
"sort":{
"age":{
"order":"desc"
}
}
}
聚合查询
聚合查询使用的是aggs关键字,然后起一个聚合操作的名字,这个名字为键,然后选择聚合的操作,可以取terms统计或者avg平均等,然后使用field选择字段,例如
{
"aggs"://聚合操作
{
"agegroup"://名字,随意
{
"terms"://统计
{
"field":"age" //字段
}
}
},
"size":0 //不显示原的数据,不添加则显示
}
映射关系
在关系数据库中,数据库表中列结构信息有长度,约束等,在Elasticsearch也有相似的概念,被称之为映射。
查询的时候有一些数据可以分词后查询,也就是模糊查询,有一些数据是完全匹配的,在Elasticsearch当中,可以提前设置好,使得一些字段的数据在查询的时候不可以进行分词,也就是不允许模糊查询,甚至可以设置index属性,表明这个数据不可以通过该字段进行查询。
以get的方式请求
http://localhost:9200/base/_mapping
并且在body里面输入json数据,选择json格式,输入关键字propertices,然后决定字段的设置,type可以决定是否可以分词,index可以决定是否可以通过数据进行索引,例如
{
"propertices":
{
"name":{
"type":"text", //text表示可以进行分词
"index":"true" //表示可以通过该字段进行查询
},
"sex":{
"type":"keyword", //keyword表示不可以进行分词
"index":"true"
},
"age":
{
"type":"keyword",
"index":"false" //表示不可以通过该字段进行查询
}
}
}