目录

1.1 数据准备

1.2 geo_distance query

1.3 geo_bounding_box query

1.4 geo_polygon query

1.5 geo_shape query

2.ElasticSearch 特殊查询

2.1 more_like_this query

2.2 script query

2.3 percolate query

1.1 数据准备

创建一个索引:

PUT geo
{"mappings": {"properties": {"name":{"type": "keyword"},"location":{"type": "geo_point"}}}
}

准备一个 geo.json 文件:

{"index":{"_index":"geo","_id":1}}
{"name":"西安","location":"34.288991865037524,108.9404296875"}
{"index":{"_index":"geo","_id":2}}
{"name":"北京","location":"39.926588421909436,116.43310546875"}
{"index":{"_index":"geo","_id":3}}
{"name":"上海","location":"31.240985378021307,121.53076171875"}
{"index":{"_index":"geo","_id":4}}
{"name":"天津","location":"39.13006024213511,117.20214843749999"}
{"index":{"_index":"geo","_id":5}}
{"name":"杭州","location":"30.259067203213018,120.21240234375001"}
{"index":{"_index":"geo","_id":6}}
{"name":"武汉","location":"30.581179257386985,114.3017578125"}
{"index":{"_index":"geo","_id":7}}
{"name":"合肥","location":"31.840232667909365,117.20214843749999"}
{"index":{"_index":"geo","_id":8}}
{"name":"重庆","location":"29.592565403314087,106.5673828125"}

最后,执行如下命令,批量导入 geo.json 数据:

curl -XPOST "http://localhost:9200/geo/_bulk?pretty" -H "content-type:application/json" --data-binary @geo.json

可能用到的工具网站:

http://geojson.io/#map=6/32.741/116.521

1.2 geo_distance query

给出一个中心点,查询距离该中心点指定范围内的文档:

GET geo/_search
{"query": {"bool": {"must": [{"match_all": {}}],"filter": [{"geo_distance": {"distance": "600km","location": {"lat": 34.288991865037524,"lon": 108.9404296875}}}]}}
}

以(34.288991865037524,108.9404296875) 为圆心,以 600KM 为半径,这个范围内的数据。

1.3 geo_bounding_box query

在某一个矩形内的点,通过两个点锁定一个矩形:

GET geo/_search
{"query": {"bool": {"must": [{"match_all": {}}],"filter": [{"geo_bounding_box": {"location": {"top_left": {"lat": 32.0639555946604,"lon": 118.78967285156249},"bottom_right": {"lat": 29.98824461550903,"lon": 122.20642089843749}}}}]}}
}

以南京经纬度作为矩形的左上角,以舟山经纬度作为矩形的右下角,构造出来的矩形中,包含上海和杭州两个城市。

1.4 geo_polygon query

在某一个多边形范围内的查询。

GET geo/_search
{"query": {"bool": {"must": [{"match_all": {}}],"filter": [{"geo_polygon": {"location": {"points": [{"lat": 31.793755581217674,"lon": 113.8238525390625},{"lat": 30.007273923504556,"lon":114.224853515625},{"lat": 30.007273923504556,"lon":114.8345947265625}]}}}]}}
}

给定多个点,由多个点组成的多边形中的数据。

1.5 geo_shape query

geo_shape 用来查询图形,针对 geo_shape,两个图形之间的关系有:相交、包含、不相交。

新建索引:

PUT geo_shape
{"mappings": {"properties": {"name":{"type": "keyword"},"location":{"type": "geo_shape"}}}
}

然后添加一条线:

PUT geo_shape/_doc/1
{"name":"西安-郑州","location":{"type":"linestring","coordinates":[[108.9404296875,34.279914398549934],[113.66455078125,34.768691457552706]]}
}

接下来查询某一个图形中是否包含该线:

GET geo_shape/_search
{"query": {"bool": {"must": [{"match_all": {}}],"filter": [{"geo_shape": {"location": {"shape": {"type": "envelope","coordinates": [[106.5234375,36.80928470205937],[115.33447265625,32.24997445586331]]},"relation": "within"}}}]}}
}

relation 属性表示两个图形的关系:

  • within 包含

  • intersects 相交

  • disjoint 不相交

2.ElasticSearch 特殊查询

2.1 more_like_this query

more_like_this query 可以实现基于内容的推荐,给定一篇文章,可以查询出和该文章相似的内容。

GET books/_search
{"query": {"more_like_this": {"fields": ["info"],"like": "大学战略","min_term_freq": 1,"max_query_terms": 12}}
}
  • fields:要匹配的字段,可以有多个

  • like:要匹配的文本

  • min_term_freq:词项的最低频率,默认是 2。特别注意,这个是指词项在要匹配的文本中的频率,而不是 es 文档中的频率

  • max_query_terms:query 中包含的最大词项数目

  • min_doc_freq:最小的文档频率,搜索的词,至少在多少个文档中出现,少于指定数目,该词会被忽略

  • max_doc_freq:最大文档频率

  • analyzer:分词器,默认使用字段的分词器

  • stop_words:停用词列表

  • minmum_should_match

2.2 script query

脚本查询,例如查询所有价格大于 200 的图书:

GET books/_search
{"query": {"bool": {"filter": [{"script": {"script": {"lang": "painless","source": "if(doc['price'].size()!=0){doc['price'].value > 200}"}}}]}}
}

2.3 percolate query

percolate query 译作渗透查询或者反向查询。

  • 正常操作:根据查询语句找到对应的文档 query->document

  • percolate query:根据文档,返回与之匹配的查询语句,document->query

应用场景:

  • 价格监控

  • 库存报警

  • 股票警告

  • ...

例如阈值告警,假设指定字段值大于阈值,报警提示。

percolate mapping 定义:

PUT log
{"mappings": {"properties": {"threshold":{"type": "long"},"count":{"type": "long"},"query":{"type":"percolator"}}}
}

percolator 类型相当于 keyword、long 以及 integer 等。

插入文档:

PUT log/_doc/1
{"threshold":10,"query":{"bool":{"must":{"range":{"count":{"gt":10}}}}}
}

最后查询:

GET log/_search
{"query": {"percolate": {"field": "query","documents": [{"count":3},{"count":6},{"count":90},{"count":12},{"count":15}]}}
}

查询结果中会列出不满足条件的文档。

查询结果中的 _percolator_document_slot 字段表示文档的 position,从 0 开始计。

elasticsearch地理位置查询相关推荐

  1. Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合

    Elasticsearch(三)--Es搜索(简单使用.全文查询.复合查询).地理位置查询.特殊查询.聚合操作.桶聚合.管道聚合 一.Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索 ...

  2. Elasticsearch实战——地理位置查询

    Elasticsearch实战--地理位置查询 文章目录 Elasticsearch实战--地理位置查询 1. 半径查询(geo_distance query) 2. 指定矩形内的查询(geo_bou ...

  3. 实战ELK(9) Elasticsearch地理位置

    实战ELK(9) Elasticsearch地理位置 地理坐标点(geo-point) 是指地球表面可以用经纬度描述的一个点.地理坐标点可以用来计算两个坐标位置间的距离,或者判断一个点是否在一个区域中 ...

  4. elasticsearch高级查询进阶

    文章目录 前期准备 应用场景 1.constant_score查询-不考虑文档频率得分,与搜索关键字命中更多的返回结果 2.sort排序-分数相同情况下,按照指定价格域排序 3.不考虑文档频率TF/I ...

  5. Elasticsearch地理位置

    介绍 地理坐标点(geo-point) 是指地球表面可以用经纬度描述的一个点.地理坐标点可以用来计算两个坐标位置间的距离,或者判断一个点是否在一个区域中.地理坐标点不能被动态映射(dynamic ma ...

  6. 七(7)探花功能-MongoDB地理位置查询-附近的人

    课程总结 1.探花功能 业务需求 执行过程 2.MongoDB的地理位置查询 地理位置查询的应用场景 查询案例 3.搜附近 上报地理位置 使用MongoDB搜索附近 一. 探花左划右滑 探花功能是将推 ...

  7. elasticsearch 分页查询实现方案——Top K+归并排序

    elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10, 注意:size的大小不能 ...

  8. Elasticsearch聚合查询案例分享

    为什么80%的码农都做不了架构师?>>>    Elasticsearch聚合查询案例分享 1.案例介绍 本文包含三个案例: 案例1:统计特定时间范围内每个应用的总访问量.访问成功数 ...

  9. elasticsearch高亮显示查询结果

    elasticsearch高亮显示查询结果 //高亮显示查询结果 @Test public void demo9() throws Exception{//创建连接搜索服务器的对象Client cli ...

最新文章

  1. python获取硬件信息
  2. MongoRepository
  3. redis VS kafka
  4. java开发中准则怎么写_Java开发中通用的方法和准则20条
  5. html5中折叠面板,Ant Design中折叠面板Collapse
  6. 我有一段很厉害的代码,不外传的那种
  7. Two sum(给定一个无重复数组和目标值,查找数组中和为目标值的两个数,并输出其下标)...
  8. 「雕爷学编程」Arduino动手做(19)—震动报警模块
  9. 管理感悟:深入理解软件
  10. SuperMap iDesktop / iDesktopX 加载大疆智图(DJI Terra)导出的OSGB数据效果异常的绕行方案
  11. 免费证件照换底色微信小程序
  12. 微信公众号:weixin-js-sdk使用总结
  13. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.21
  14. LeetCode-1873. 计算特殊奖金
  15. 高清录播服务器(服务器是什么)
  16. AB测试-A/B Test
  17. 换空间导致排名丢失之谷歌排名恢复技巧
  18. php 获取必应图片信息,PHP自动获取必应今日美图
  19. Hexo添加字数统计和阅读统计
  20. 系统更新荣耀play服务器,EMUI9.0系统不限量升级,荣耀Play“浴火重生”,你更新了吗?...

热门文章

  1. 基于 Quartz 的调度中心
  2. 《深入浅出Spring》@PropertySource、@Value注解及动态刷新实现
  3. HDU4082Hou Yi's secret(相似三角形的个数)
  4. ubuntu AndroiStudio 中 外设(手机、平板) 无法使用
  5. 怎样对论文重复率进行检查
  6. [关注大学生]大学毕业生择业:是当鸡头还是凤尾?
  7. 免费博客空间服务评测、注册和申请
  8. 10.(leaflet之家)leaflet暗色系地图样式地图(滤镜实现,反色滤镜)
  9. echarts引入geo地图数据,前端学习记录01
  10. 3d效果图制作傻瓜软件_3D效果图制作哪个软件是最适合的?