我的Ionic 2应用程序内部有一些搜索功能,除搜索字符串外,还需要能够为搜索添加过滤器。我有搜索字符串片段,但我不确定如何传入一个值数组来检查我的Algolia indice中的特定数组。
这是我的功能:
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"]
//&lt; - 这些会检查Algolia中的genres
。
["Guitar", "Drums", "Piano"]
//&lt; - 这些会检查Algolia中的instruments
。
^这两个数组将是额外的过滤器,可以限制返回哪些结果,就像您在数千个不同的搜索组件中看到的那样。虽然我无法解决这个问题。有什么想法吗?
提前谢谢!
答案 0 :(得分:1)
据我所知,有两种方法可以做到这一点。
您也可以进入您的Algolia管理员面板并启用Advanced Syntax
,并将Remove words if no results
设置为allOptional
Query Expansion
面板ranking
下的"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",
],
};
此方法允许您正确深入查看结果并组合搜索属性。
在你的情况下,这是一个例子。
<appSettings>
<add key ="vs:EnableBrowserLink" value="false"/>
</appSettings>