阿尔戈利亚如何按字符串值和地理位置排序



我正在为新产品制作原型,需要一些帮助来弄清楚阿尔戈利亚的可行性。我确实浏览了他们的文档,但找不到正确的答案。任何帮助表示赞赏。

我们数据的最佳示例是分类的。在数据集中,我们有地理位置(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'
},
]

搜索要求

按类别
  • 排序,首先选择类别,然后按任意顺序排列所有其他类别
  • 按地理位置排序,这是二级过滤器

我们需要显示系统中的所有数据,但首先选择类别,其次选择距离。

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

为此,您可以使用multiple-queries策略,其中您将有一个查询,其中包含与类别匹配的筛选器,然后是另一个与不在类别中的所有对象匹配的查询。在查询参数中,您可以使用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);

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

  • 如何使用多个查询

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

  • aroundLatLng:当您想要定义查询的地理中心时使用
  • aroundRadius:用于将搜索限制在查询中心周围的特定范围内
  • aroundPrecision:定义距离方面的排名必须有多精确。

最新更新