algolia如何通过字符串值和地理位置进行排序

时间:2018-02-02 21:37:37

标签: algolia

我正在研究新产品的原型,需要一些帮助才能找出algolia的可行性。我确实通过他们的文档,但找不到正确的答案。任何帮助表示赞赏。

我们对数据的最佳示例进行了分类。在数据集中,我们有地理定位(lat-lng)和类别

[ 
     {
        category: 'retail_shops',
        "_geoloc": {
             "lat": 40.639751,
             "lng": -73.778925
        },
        title: 'walget1'
     },
     {
        category: 'retail_shops',
        "_geoloc": {
             "lat": 40.639751,
             "lng": -73.778925
        },
        title: 'walget1'
     },
]

搜索要求

  • 排序类别,首先选择类别,然后按任意顺序排列所有其他类别
  • sortby geolocation,这是辅助过滤器

我们需要显示系统中的所有数据,但首先选择类别,将辅助距离作为辅助。

我正在尝试这样做是javascript,确实找到了搜索和searchForFacetValues方法,但文档是全方位的。任何理想如何实现这一目标?不需要代码,但一般指导肯定会有所帮助。

1 个答案:

答案 0 :(得分:0)

为了做到这一点,您可以使用aroundLatLng策略,在该策略中,您将使用与该类别匹配的过滤器进行查询,然后使用与该类别中不存在的所有对象匹配的另一个查询。然后,您可以在查询参数中使用aroundLatLngViaIp字段或const client = algoliasearch('ApplicationID', 'apiKey'); // these two values would be obtained from somewhere (like InstantSearch) const query = 'walg'; const category = 'retail_shops'; const queries = [{ indexName: 'products', query: `${query}`, params: { hitsPerPage: 3, filters: `category:${category}`, aroundLatLngViaIP:true } }, { indexName: 'products', query: `${query}`, params: { hitsPerPage: 10, filters: `NOT category:${category}`, aroundLatLngViaIP:true } }]; const searchCallback = (err, content) => { if (err) { console.error(err); return; } const categorySpecificResults = content.results[0]; for (var i = 0; i < categorySpecificResults.hits.length; ++i) { console.log(categorySpecificResults.hits[i]); } const geolocatedOnlyResults = content.results[1]; for (var i = 0; i < geolocatedOnlyResults.hits.length; ++i) { console.log(geolocatedOnlyResults.hits[i]); } } // perform the 2 queries in a single API call: // - 1st query targets index `products` with category filter and geolocation // - 2nd query targets index `products` with negative category filter and geolocation client.search(queries, searchCallback); 字段。

以下代码段应该可以帮助您更好地了解如何实现您的目标:

node_modules

您可以在此页面找到有关如何使用多个查询的更多信息:

如果您想对地理位置进行更细粒度的控制,例如定义搜索的精度或最大范围,您可以在这些页面上找到有关这些不同功能的更多信息: