geolocation - 什么是组合文本/地理位置搜索的最佳方法
问题描述
我知道..我的问题可能很“广泛”但是..我需要一些意见和一些反馈:)
我有一个项目,我想搜索周围的一些东西,但我不确定是否应该使用 ElasticSearch 或 MongoDB,甚至组合多种技术/框架。
情况
假设我的项目是关于购买汽车和汽车零件。我有一个搜索栏,当我输入内容时,我想获得最接近的搜索结果(文本方法),但也希望这些结果按与当前位置的距离(地理定位方法)排序。
当然,用户输入可以是品牌、汽车零件、汽车品牌,或者是参考。所以搜索应该查找每个文档/行子值(品牌、参考、类型等)。结果还必须根据当前用户位置进行排名。
一直以来,我都在网上阅读各种媒体帖子,所以问题/答案等......我已经有了几种可能性,但是......对于其中一些,我觉得 scalling 可能真的很难或真的很贵. 有我可能的解决方案/方法:
可能的方法
- 使用辅助数据库(postgres、mongodb 等)进行完整的 Elasticsearch 搜索:
虽然完整的数据部分将在辅助数据库(SQL 或 NoSQL)中,但我认为 ES 可能是一种仅存储用户可以搜索的数据(汽车品牌、汽车零件名称、汽车零件品牌、汽车)的方法部分参考等)。
ES结果将是可以从侧数据库查询的相关ID。但是,我不知道我是否可以将位置与它结合起来。我不想创建一个使用 lat/lng 进行微积分的后端算法。
我希望在这个解决方案中,如果位置和文本搜索结合起来,它可以(使用限制选项/参数)减少计算量,但我不确定......
- 结合 ElasticSearch + MongoDB
作为之前的可能情况,我认为也许,我可以直接在 ES 中搜索我需要的条件,而在返回 ID 时,我可以$and
使用地理空间查询在 MongoDB 中进行{"_id":{$in: myIDs}}
查询。这样,也许在未来,我可以将此类“输入字符串”的结果存储在缓存中,然后使用 mongoDB 查询按位置对它们进行排名。
我在这个解决方案中看到的问题是,如果我有一个全球数据库,那么它将在全球范围内搜索(这可能不是预期的行为),然后向 mongodb 发送一个巨大的 ID 数组,这些 ID 必须被处理...这可能会杀死数据库甚至更糟...
- 仅限 MongoDB
这种方法是我首先想到的,因为这是我使用最多的数据库。但是……文本搜索选项的行为与LIKE *%s*
SQL 中的行为基本相同,并且……如果输入中有任何错误,它将不会给出预期的结果。另外,我知道文本搜索,如 SQL,不如 ES 优化,所以......这可能不是要走的路
- ES + 后端计算 + 侧库
作为第一种情况,所有数据库都存储在一个侧数据库(SQL、NoSQL 等)中。我使用 ES 按标准查找。获得所有结果后,我将创建一个后端算法,根据两个给定的 lat/lng(用户位置 + ES 结果位置)对结果进行排名。对所有内容进行排名后,我就会从侧面数据库中获取所有数据(按 ID)。
这种方法可能会杀了我,或者会禁止我使用stackoverflow xD
所以这些是我想到的方法,但是......正如我所说,我不确定它们中的任何一个是否真的是这样做的方法。即使也许一两个解决方案可以实现它,可扩展性真的很重要,所以,我必须从一开始就考虑它:)
感谢您的反馈,我真的很感激!
最好的,
最大限度
解决方案
推荐阅读
- javascript - 无效属性:预期的数组,但未定义
- python - PYTHON 中可能输入的函数
- excel - 使用 Like 和通配符进行 VBA 字符串搜索
- symfony - Symfony 分页错误这里没有命名空间“KnpPaginator”的注册路径
- node.js - OracleDB NodeJS 模块连接池未与模块共享
- accessibility - 焦点可见对比
- java - 如何对列表进行排序
- > 每个列表的第一个元素?
- windows - 无法从主机显示容器的网站
- javascript - 如果条件正确,为什么序列不起作用?
- java - 如何在休眠中为多对多关系添加现有集合中的条目?