【问题标题】:Algolia Key Value SearchAlgolia 键值搜索
【发布时间】:2015-12-30 22:59:02
【问题描述】:

我目前正在使用 Algolia 搜索 API,但无法弄清楚如何通过 key value 搜索 + 查询字符串来限制结果。我的意思是这个。

我有一个属性列表。 每个属性都属于一个客户。

在应用程序中如果我正在查看客户信息卡并且我想搜索客户拥有的属性,将结果限制在客户范围内然后查找查询字符串会更有意义。

我使用 MongoDB 作为我的数据库,并将客户端 ID 存储为子文档,就像这样

//Property Document
{
 _id : "randomID"
 client : {
  _id : "randomID",
  name : "ClientName"
 }
}

【问题讨论】:

    标签: node.js meteor algolia


    【解决方案1】:

    如果您想将搜索限制为特定的client,我会使用构面过滤将搜索限制为仅针对该客户端。

    • 在您的索引设置中的attributesForFaceting 中添加client._id
    • 使用facetFilters=client._id:MYCLIENTID 查询参数过滤您的搜索

    然后,您还应该看看Secured API keys,它们能够以安全的方式对此类限制进行编码(因此最终用户无法修补 JS 代码并解决过滤问题)。

    【讨论】:

    • 我在尝试此操作时收到Invalid parameter: attributesForFaceting' 错误。我的代码看起来像这样gist.github.com/patrickml/c5d71e296319ffaba1cb
    • 最终结果是我确实使用了错误的参数。正确的参数只是facets 我还需要去仪表板并添加方面。就个人而言,我觉得这是一种黑客方式,我想知道是否还有另一种方式。不过感谢您的帮助!
    • attributesForFaceting 是索引设置,不是查询参数;这就是您收到错误的原因。
    • 如果您想以一种安全的方式进行操作,您应该查看安全 API 密钥 algolia.com/doc/javascript#secured-api-keys,它基本上是在 API 密钥中对这些过滤器进行编码。这真的是要走的路,没有什么不好的:)
    • 我知道出了什么问题。我不得不使用搜索键,而不是 MY_SECRET_KEY。回想起来,这对我来说似乎是一个愚蠢的错误。
    【解决方案2】:

    有一个名为restrictSearchableAttributes[link]的参数来限制,在查询时,只搜索某些属性。不过,在您的情况下,我认为您可以通过将每个 client info 放入不同的记录(+ 相关文档的信息)来获得更准确的结果。

    【讨论】:

    • 遗憾的是,这不是我要寻找的:/ 我没有试图限制我搜索的字段,我试图在搜索(client._id === "SomeID") && AnyDocumentsWithSomeInputedText 中设置基本的以下逻辑,基本上只返回具有正确客户端的文档。 _id 包含文档中其他地方的我的搜索查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2017-09-21
    • 2021-04-26
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多