OpenSearch支持类似附近人或地点的搜索。如果希望按照地点或附近人传入的坐标,那么可以使用本文介绍的方式,提高搜索效率,也同时提供排序功能。
1.创建应用结构配置
在OpenSearch应用结构表中增加lon和lat的DOUBLE类型地理位置坐标,再创建一个GEO_POINT类型的company_lon_lat字段(字段名称自定义) 。索引结构定义中,为company_lng_lat设置分析器为地理位置分析器,并添加为属性字段。
完整创建应用流程请参考文档:快速搭建应用
2.数据源配置
字段映射时,将company_lon_lat这个应用结构字段配置StringCatenateExtractor插件,将现有的经度字段lon和纬度字段lat,联合起来。通过空格联合,生成到目标字段company_lng_lat。
注意:目标字段company_lng_lat的映射字段可忽略:
插件具体说明请参考文档:数据源及插件简介
3.搜索测试
例如:query=name:'Alibaba' AND company_lng_lat:'circle(116.5806 39.99624, 1000)'
说明:表示查询公司名为Alibaba,并且在坐标’116.5806 39.99624’附近1000米(1公里)以内的文档。
语法:query=spatial_index:'circle(LON LAT,Radius)'
4.新增精排表达式
例如:(distance(company_lng_lat,long_lat_in_query,distance)+1))*10000
功能:按距离远近将召回的文档进行排序。
语法:distance(location1, location2, outputname, defaultvalue)
说明:示例中long_lat_in_query需要在kvpairs中设置,例如:kvpairs=longitude_in_query:120.34256 30.56982
在文档使用中是否遇到以下问题
更多建议
匿名提交