直接使用DSL语句查询文档
0.DSL查询分类
Elasticsearch提供了基于JSON的DSL来定义查询。常见的查询类型包括:
查询所有:查询到所有的数据,一般测试用:
match_all
全文检索:(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。
match_query
multi_match_query
精确查询:根据精确词条值查找数据,一般是查找keyword,数值,日期,boolean等类型字段。
ids
range
term
地理查询:根据经纬度查询
geo_distance
geo_bounding_box
复合查询:复合查询可以将上述各种查询条件组合起来,合并查询条件
bool
function_score
1.查询所有
一般测试用
#查询所有
GET /hotel/_search
{
"query": {
"match_all": {}
}
}
2.全文检索查询
会对用户输入内容分词,常用于搜索框搜索
#全文检索查询,会对用户输入的内容分词,常用于搜索框搜索(依据相关度排序)
#match:根据一个字段查询
GET /hotel/_search
{
"query": {
"match": {
"all": "外滩如家"
}
}
}
#multi_match:与match查询类似,只不过允许同时查询多个字段。根据多个字段查询,
参与查询字段越多,性能越差(建议cope_to)
GET /hotel/_search
{
"query": {
"multi_match": {
"query": "外滩如家",
"fields": ["brand","name","business"]
}
}
}
3.精准查询
一般是查找keyword,数值,日期,boolean等类型字段。所以不会对搜索条件分词
#精确查询一般是查找keyword,数值,日期,boolean等类型字段。所以不会对搜索条件分词,常见有:
#term:根据词条精确值查询
GET /hotel/_search
{
"query": {
"term": {
"brand": {
"value": "如家"
}
}
}
}
#range:根据值的范围查询
GET /hotel/_search
{
"query": {
"range": {
"price": {
"gte": 500,
"lte": 1000
}
}
}
}
4.地理坐标查询
常用于搜索自己附近的地点或车酒店等
#根据经纬度查询
#geo_bounding_box查询geo_point值落在某个矩形范围的所有文档
GET /hotel/_search
{
"query": {
"geo_bounding_box":{
"location":{
"top_left":{
"lat":31,
"lon":121.5
},
"bottom_right":{
"lat":30.9,
"lon":121.7
}
}
}
}
}
#geo_distance:查询到指定中心点小于某个距离值的所有文档
GET /hotel/_search
{
"query": {
"geo_distance":{
"distance":"2km",
"location":"31.21,121.5"
}
}
}
5.组合查询
将其他简单的查询组合起来,实现更加复杂的搜索逻辑。
1.算分排序(Function Score Query)
注意:利用match查询时,文档会根据与搜索词条的关联度打分(_score),返回结果时按照分值降序排列。