Azure搜索:按动态数据排序

时间:2017-11-14 17:48:03

标签: azure-search

我有一个Azure搜索索引,包含可以"发生的文档。在多个地区任意次数。例如,Document1Region1中有5次出现,在Region2中有20次出现。 Document2Region1中有54次,在Region3中有10次。 Document3Region3中有10次出现。我们希望使用Azure搜索进行搜索和建议,但将顺序基于区域上的出现次数。例如,Document中用户对Region1的搜索应按Document2Document1Document3的顺序返回,因为Document2有54次出现在该地区,Document1有5次出现而Document3没有。

[
  { 'name': 'Document1', 'regions': ['Region1|5', 'Region2|20'] },
  { 'name': 'Document2', 'regions': ['Region1|54', 'Region3|10'] },
  { 'name': 'Document3', 'regions': ['Region3|10'] }
]

我很难弄清楚如何构建索引,或者甚至可以使用Azure搜索。请注意,区域数量可能达到数十万。我可以更改中心点的区域并使用地理空间功能,但我仍然不知道如何打印数据或查询数据。

构建索引的最佳方法是什么?如何使查询成为可能?

1 个答案:

答案 0 :(得分:1)

  

tl; dr - 根据我的一些假设,你可能会有一个解决方案。请继续阅读,如果可能的话,尝试提供一些围绕我的假设的验证,以便给出更好的答案(如果存在这样的答案)。

不幸的是,Azure搜索没有针对您的方案的开箱即用方法。可能会有一个解决方法 - 而不是像['Region1|5', 'Region2|20']这样的区域集合,您可以尝试构造文档,使其看起来像['Region1', 'Region1',...., 'Region2', 'Region2', ...](也就是说,使集合包含Region1的{​​{1}}和 m 元素的> n 元素,在您的情况下 n = 5且 m = 10。

然后您应该只能使用用户来自的 Region 进行搜索,并且我相信应根据哪个文档的集合列(Region2)包含更多事件来对结果进行排序被查询的地区。

这种方法可以通过两种方式帮助您:

  1. 您可以尝试将每个区域添加为搜索索引中的列,并使用一些查询来获得所需的结果。但是,既然你提到可能有数十万这样的区域,它可能不适用于我们的service limits。但是,如果不是这样,我强烈建议将每个区域添加为一列,以便您可以按列值查询/排序。
  2. 通过复制字符串方法,您可以拥有任意大的集合,因为我认为Azure搜索对集合中的元素数量没有任何限制。另外,这里的好处是,如果您的文档将具有稀疏数量的区域(即,您可能拥有100个区域的100个,但任何给定的文档只会枚举很少的区域),您应该能够实现您想要的。如果情况并非如此,这种方法可能不是非常好/高效,甚至可能让您难以管理。
  3. 另外,仅供参考我建议您查看scoring profiles feature 尤其是regions函数,看看它是否对您有用。