如果筛选出所有匹配项,如何在Azure搜索服务查询中获得“最佳匹配”?

时间:2017-05-09 18:26:53

标签: azure azure-cosmosdb azure-search azure-search-.net-sdk

Google提供了“您的意思是......”功能,允许您在拼写错误或混淆搜索内容时进行替代匹配。

就我而言,我希望用户发现“最佳匹配”,即使它被方面排除在外。

示例:

假设我有一个在线游戏(类似魔兽),个人购买或获得一套权力和工具。

我希望显示他们可以访问的所有内容的列表,以及成长为新类别所需的下一个项目。类别可以是健康,力量,防御等。

查询1:

Where can I go, or what doors can I open with the tools, experience, 
and strength I have?

查询2:

Search for the shortest path of upgrades to get me to level 4. 
Display cost, location on map, etc.

查询3:

There are 1,000 different ways to open this door. Some for gremlins, orcs, 
 and wizards.  What is the best way forward given the tools I own? 

研究

我正在查看DocumentDB和MSFT Azure搜索来处理这些查询,但我还没弄明白

  1. 如何包含用户当前的购买/资产历史记录,以提供有意义且隐私保护的结果。 (不希望其他用户看到其他用户的数据)

  2. 如何获得最佳匹配,其中一些方面比其他方面更重要(弓箭的价值超过损坏的百万美元武器)

  3. 解决问题的最短途径。鉴于用户购买历史和目标,下一次购买的最有效方法是什么?

1 个答案:

答案 0 :(得分:3)

通过Azure Cosmos DB添加Azure搜索爬虫(通过DocumentDB API)当然是处理全文搜索和拼写错误的选项 - 但是,全文搜索可能不适合您在讨论的某些场景中使用问题

例如,最短路径问题和上面的许多示例查询可以使用Azure Cosmos DB Graph API更好地建模 - 这可能会为游戏场景带来更好的延迟。

至于保护隐私 - 是通过服务器/中间层提供的数据,还是个别游戏客户端可以直接访问数据库?如果通过中间层,您会发现在中间层本身实现安全性要容易得多。如果授予对下游单个游戏客户端的数据库的直接访问权限,则可以生成一组temporary resource tokens using the user and permissions model - 以便下游客户端只能访问特定资源(例如文档或集合)。您需要构建一个中间层来租用和刷新临时资源令牌 - 下游客户端将使用这些来访问数据库而不是主数据库或只读密钥。