首页 > 解决方案 > 什么是组合文本/地理位置搜索的最佳方法

问题描述

我知道..我的问题可能很“广泛”但是..我需要一些意见和一些反馈:)

我有一个项目,我想搜索周围的一些东西,但我不确定是否应该使用 ElasticSearch 或 MongoDB,甚至组合多种技术/框架。

情况

假设我的项目是关于购买汽车和汽车零件。我有一个搜索栏,当我输入内容时,我想获得最接近的搜索结果(文本方法),但也希望这些结果按与当前位置的距离(地理定位方法)排序。

当然,用户输入可以是品牌、汽车零件、汽车品牌,或者是参考。所以搜索应该查找每个文档/行子值(品牌、参考、类型等)。结果还必须根据当前用户位置进行排名。


一直以来,我都在网上阅读各种媒体帖子,所以问题/答案等......我已经有了几种可能性,但是......对于其中一些,我觉得 scalling 可能真的很难或真的很贵. 有我可能的解决方案/方法:

可能的方法

虽然完整的数据部分将在辅助数据库(SQL 或 NoSQL)中,但我认为 ES 可能是一种仅存储用户可以搜索的数据(汽车品牌、汽车零件名称、汽车零件品牌、汽车)的方法部分参考等)。

ES结果将是可以从侧数据库查询的相关ID。但是,我不知道我是否可以将位置与它结合起来。我不想创建一个使用 lat/lng 进行微积分的后端算法。

我希望在这个解决方案中,如果位置和文本搜索结合起来,它可以(使用限制选项/参数)减少计算量,但我不确定......

作为之前的可能情况,我认为也许,我可以直接在 ES 中搜索我需要的条件,而在返回 ID 时,我可以$and使用地理空间查询在 MongoDB 中进行{"_id":{$in: myIDs}}查询。这样,也许在未来,我可以将此类“输入字符串”的结果存储在缓存中,然后使用 mongoDB 查询按位置对它们进行排名。

我在这个解决方案中看到的问题是,如果我有一个全球数据库,那么它将在全球范围内搜索(这可能不是预期的行为),然后向 mongodb 发送一个巨大的 ID 数组,这些 ID 必须被处理...这可能会杀死数据库甚至更糟...

这种方法是我首先想到的,因为这是我使用最多的数据库。但是……文本搜索选项的行为与LIKE *%s*SQL 中的行为基本相同,并且……如果输入中有任何错误,它将不会给出预期的结果。另外,我知道文本搜索,如 SQL,不如 ES 优化,所以......这可能不是要走的路

作为第一种情况,所有数据库都存储在一个侧数据库(SQL、NoSQL 等)中。我使用 ES 按标准查找。获得所有结果后,我将创建一个后端算法,根据两个给定的 lat/lng(用户位置 + ES 结果位置)对结果进行排名。对所有内容进行排名后,我就会从侧面数据库中获取所有数据(按 ID)。

这种方法可能会杀了我,或者会禁止我使用stackoverflow xD


所以这些是我想到的方法,但是......正如我所说,我不确定它们中的任何一个是否真的是这样做的方法。即使也许一两个解决方案可以实现它,可扩展性真的很重要,所以,我必须从一开始就考虑它:)

感谢您的反馈,我真的很感激!

最好的,

最大限度

标签: geolocationfull-text-search

解决方案


推荐阅读