【发布时间】:2016-12-26 08:49:08
【问题描述】:
我目前正在构建一个网站/网络应用程序,该应用程序将从 Algolia 提取“景点”数据然后显示它 - 本质上是一个非常简单的搜索/过滤网络应用程序。
当用户找到他们想要的景点时,他们点击它并显示更多详细信息(描述、谷歌地图位置、地址等)。 我希望它显示的一件事是附近(半径 5 英里)的其他景点。
现在,我在 Algolia 文档上做了很多工作,我发现使用 AlgoliaSearchHelper 可以做到这一点(请参阅:https://www.algolia.com/doc/guides/geo-search/geo-search-overview#filter-and-sort-around-a-location)
长话短说,我已经设法让 Algolia 为我提供距离一个点 5 英里半径范围内的景点,我的问题在于经度和纬度是手动输入的,而不是动态的(将从 _geoloc 中提取)在 Algolia 对象中)。
我目前拥有的是:
var algoliaHelper = algoliasearchHelper(client, INDEX_NAME);
algoliaHelper.setQueryParameter('getRankingInfo', true);
algoliaHelper.setQueryParameter('aroundLatLng', '51.7664027,-0.4747815');
algoliaHelper.setQueryParameter('aroundRadius', 118047);
algoliaHelper.search();
(注意:aroundRadius设置为118047,因为我在5英里内实际上没有任何其他景点,这只是为了在舞台上测试)
这很好用,它按距离顺序为我提供了最近的景点,并显示了距离,因为我再次使用 Algolia 的文档来制作这个:
if (hit._rankingInfo.matchedGeoLocation) {
hit.distance = '(' + parseInt(hit._rankingInfo.matchedGeoLocation.distance * 0.00062137, 10) + 'm)';
}
如果我尝试将其更改为动态条目(从景点的 _geoloc 数据中提取并转换为字符串,例如:
var test = String(content._geoloc.lat + "," + content._geoloc.lng);
var algoliaHelper = algoliasearchHelper(client, INDEX_NAME);
algoliaHelper.setQueryParameter('getRankingInfo', true);
algoliaHelper.setQueryParameter('aroundLatLng', test);
algoliaHelper.setQueryParameter('aroundRadius', 118047);
algoliaHelper.search();
结果仍然出现...但是距离为 0,当我 console.log() 时,我在 _rankingInfo 对象下看到 geoDistance 为 9,这表明它无法正常工作,因为最初相同数据的距离为 42073米。
我的问题是,有没有办法使用我选择的景点中的 _geoloc 详细信息来动态地拉出半径内的其他景点(当我去另一个景点时,它可能位于完全不同的位置,附近有不同的景点)。
感谢我能得到的任何帮助,我不会对我的 JS 知识存在巨大差距感到震惊,这一点非常明显。
提前致谢。
【问题讨论】:
标签: javascript search algolia