如何查询Algolia利用搜索字符串AND项目数组进行检查?

时间:2017-03-01 18:00:42

标签: angular ionic2 algolia

我的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

^这两个数组将是额外的过滤器,可以限制返回哪些结果,就像您在数千个不同的搜索组件中看到的那样。虽然我无法解决这个问题。有什么想法吗?

提前谢谢!

1 个答案:

答案 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>