Elasticsearch过滤取代PostGIS过滤?

 陈浩颖美娇承湖_527 发布于 2022-12-29 09:32

我想完全转移elasticsearch以使用PostGIS扩展来过滤PostGreSQL当前处理的元素.

为此,我必须选择围绕(多)多边形的给定距离内的每个结果.
那些多边形可能很复杂(数百个点).

我在一年前看到,elasticsearch无法处理这样的过滤器.
在一年中,ES已经有了很大的发展(包括一个主要版本),那么现在支持的那种过滤是什么?如果没有,有什么计划吗?


为了解释,这是一个简单的用例:
将此多边形视为粗略描述巴黎"Ile delacité"边界:

{
  "type": "MultiPolygon",
  "coordinates": [
    [
      [
        [
          2.339546203568933,
          48.857710541463412
        ],
        [
          2.345168113663295,
          48.856750530470009
        ],
        [
          2.350618362380806,
          48.855056348509926
        ],
        [
          2.352077484084764,
          48.853785674412812
        ],
        [
          2.352592468215498,
          48.851611335037532
        ],
        [
          2.348730087234629,
          48.852543206332619
        ],
        [
          2.343194007828603,
          48.855084585345963
        ],
        [
          2.339546203568933,
          48.857710541463412
        ]
      ]
    ]
  ]
}

考虑另一个岛对面的位置(因此,在多边形之外):

{
  "type": "Point",
  "coordinates": [
    2.359378457022193,
    48.850358223189644
  ]
}

以下是使用Django ORM的一些示例查询(我可以提供SQL等价但我认为这不相关):

>>> Location.objects.filter(point__within=(area.polygon))
[]
>>> Location.objects.filter(point__distance_lte=(area.polygon, D(m=500)))
[]
>>> Location.objects.filter(point__distance_lte=(area.polygon, D(m=550)))
[]

__distance查找使用PostGIS的ST_distance_sphere.

1 个回答
  • 答案是肯定的,请参阅docs特别是geo-shape过滤器.注意,多边形搜索需要添加spatial4j和Java拓扑套件(JTS)依赖项.

    然而,有一点需要注意,那就是JTS的许可,即LGPL.我引用曼宁的书,Solr in Action,第531页,与Solr相关,就像ElasticSearch一样,是建立在Apache Lucene之上的,所以同样的限制也适用.

    Apache Solr是开源的,并根据Apache 2.0许可授予许可,授予您在任何系统(包括专有系统)中使用代码和软件的权利,无需承担任何法律责任来共享您的代码或支付任何许可费用.决定允许"与JTS集成",JTS是根据不太宽松的LGPL(较少的一般公共许可证)许可的.与Spatial4j一起,STS库(JAR文件)不包含在Solr分布中,将JTS作为可选依赖项,不需要在Solr中使用基本形状(点,矩形和圆形).如果你想在Solr中使用JTS,你必须自己添加依赖项.只要您不对JTS中的代码进行更改,通常认为引用JTS库是安全的,而不会使您的应用程序暴露于LGPL许可证(如果它是衍生作品,则需要您开源应用程序).但是,参考任何LGPL图书馆都是一项法律决定,应与贵公司的政策和/或法律顾问协商.如果您只需要支持点,圆和正方形,则在定义地理字段类型时应省略可选的JTS spatialContextFactory属性.

    JTS提供了极其强大的空间功能,实际上它的C++端口GEOS构成了Postgis空间功能的很大一部分.因此,如果您对许可没有任何问题,一旦添加了JTS和spatial4J,您可以做更多或更少的事情.

    我听过它在会议上说过,并且在JTS邮件列表上看到了讨论,JTS最终可能会转向更自由的许可证,例如BSD,它会将其打开以添加到许多其他NoSQL解决方案中作为核心,而不是可选的附加功能.

    2022-12-29 09:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有