如何使用搜索字符串和要检查的项目数组查询 Algolia?
How to query Algolia utilizing search string AND array of items to check against?
我的 Ionic 2 应用程序内部有一些搜索功能,除了搜索字符串之外,还需要能够向搜索添加过滤器。我的搜索字符串部分正在运行,但我不确定如何传入值数组以检查我的 Algolia 索引中的特定数组。
这是我的函数:
searchForUsers(filters?) {
let options = {
attributesToHighlight: ['display_name', 'instruments'],
highlightPreTag: '<span class="highlighted">',
highlightPostTag: '</span>',
attributesToRetrieve: [
"_geoloc",
"display_name",
"genres",
"instruments",
"objectID",
"playing_level",
"profile_photo",
],
};
// If there are any filters enabled?
if(filters) {
options['aroundLatLng'] = `${this.geoloc.lat},${this.geoloc.lng}`;
options['aroundRadius'] = this._utilities.milesToMeters(this.distance);
}
this.usersIndex.search(this.searchTerm, options)
.then((data) => {
this.results = data.hits;
})
.catch((error) => {
console.log(error);
});
}
如果我想将以下过滤器添加到我的搜索中,我该怎么做呢?
["Blues", "Rock", "Alternative"]
// <-- 这些将检查 Algolia 中的 genres
。
["Guitar", "Drums", "Piano"]
// <-- 这些将检查 Algolia 中的 instruments
。
^ 这两个数组将是额外的过滤器,可以限制返回的结果,就像您在数千种不同的搜索组件中看到的那样。虽然我不太明白这一点。有什么想法吗?
提前谢谢你!
据我所知,有两种方法可以做到这一点。
高级搜索
您可以进入您的 Algolia 管理面板并打开 Advanced Syntax
并在 [=15] 的 Query Expansion
面板下将 Remove words if no results
设置为 allOptional
=] 设置页面,它允许您进行如下搜索查询。
"Blues" "Rock" "Alternative" "Guitar" "Drums" "Piano"
这种方法适用于广泛匹配与引用的搜索参数相匹配的任何内容,但可能无法满足您的需求。就个人而言,我几乎总是需要更精细的粒度控制。
面
第二种方法是为这些字段打开分面,然后 运行 使用 filters
查询的搜索查询,如下例所示。
genres: "Blues" OR genres: "Rock" OR genres: "Alternative"
instruments: "Guitar" OR instruments: "Drums" OR instruments: "Piano"
这种方法可以让您正确地向下钻取结果并组合搜索属性。
这里有一个例子。
let options = {
filters: 'genres: "Blues" OR genres: "Rock" OR genres: "Alternative" AND Guitar" OR instruments: "Drums" OR instruments: "Piano"',
attributesToHighlight: ['display_name', 'instruments'],
highlightPreTag: '<span class="highlighted">',
highlightPostTag: '</span>',
attributesToRetrieve: [
"_geoloc",
"display_name",
"genres",
"instruments",
"objectID",
"playing_level",
"profile_photo",
],
};
我的 Ionic 2 应用程序内部有一些搜索功能,除了搜索字符串之外,还需要能够向搜索添加过滤器。我的搜索字符串部分正在运行,但我不确定如何传入值数组以检查我的 Algolia 索引中的特定数组。
这是我的函数:
searchForUsers(filters?) {
let options = {
attributesToHighlight: ['display_name', 'instruments'],
highlightPreTag: '<span class="highlighted">',
highlightPostTag: '</span>',
attributesToRetrieve: [
"_geoloc",
"display_name",
"genres",
"instruments",
"objectID",
"playing_level",
"profile_photo",
],
};
// If there are any filters enabled?
if(filters) {
options['aroundLatLng'] = `${this.geoloc.lat},${this.geoloc.lng}`;
options['aroundRadius'] = this._utilities.milesToMeters(this.distance);
}
this.usersIndex.search(this.searchTerm, options)
.then((data) => {
this.results = data.hits;
})
.catch((error) => {
console.log(error);
});
}
如果我想将以下过滤器添加到我的搜索中,我该怎么做呢?
["Blues", "Rock", "Alternative"]
// <-- 这些将检查 Algolia 中的 genres
。
["Guitar", "Drums", "Piano"]
// <-- 这些将检查 Algolia 中的 instruments
。
^ 这两个数组将是额外的过滤器,可以限制返回的结果,就像您在数千种不同的搜索组件中看到的那样。虽然我不太明白这一点。有什么想法吗?
提前谢谢你!
据我所知,有两种方法可以做到这一点。
高级搜索
您可以进入您的 Algolia 管理面板并打开 Advanced Syntax
并在 [=15] 的 Query Expansion
面板下将 Remove words if no results
设置为 allOptional
=] 设置页面,它允许您进行如下搜索查询。
"Blues" "Rock" "Alternative" "Guitar" "Drums" "Piano"
这种方法适用于广泛匹配与引用的搜索参数相匹配的任何内容,但可能无法满足您的需求。就个人而言,我几乎总是需要更精细的粒度控制。
面
第二种方法是为这些字段打开分面,然后 运行 使用 filters
查询的搜索查询,如下例所示。
genres: "Blues" OR genres: "Rock" OR genres: "Alternative"
instruments: "Guitar" OR instruments: "Drums" OR instruments: "Piano"
这种方法可以让您正确地向下钻取结果并组合搜索属性。
这里有一个例子。
let options = {
filters: 'genres: "Blues" OR genres: "Rock" OR genres: "Alternative" AND Guitar" OR instruments: "Drums" OR instruments: "Piano"',
attributesToHighlight: ['display_name', 'instruments'],
highlightPreTag: '<span class="highlighted">',
highlightPostTag: '</span>',
attributesToRetrieve: [
"_geoloc",
"display_name",
"genres",
"instruments",
"objectID",
"playing_level",
"profile_photo",
],
};