Azure的搜索:排序动态数据(Azure Search: Order by dynamic dat

2019-09-27 14:38发布

我的文档组成的Azure的搜索索引,可以“出现”在多个区域任意次数。 例如Document1具有5只出现在Region1 ,20只出现在Region2Document2有54次出现在Region1和10只出现在Region3Document3有10只出现在Region3 。 我们要使用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的搜索。 请注意,区域的数量是有可能在几十万。 我行不断变化的地区为中心点和使用地理空间功能来代替,但我还是不明白如何打好数据或查询。

什么是构建索引以及如何将一个使查询尽可能最好的方式是什么?

Answer 1:

文艺青年最爱的 - 有可能是基于一些假设,我对你的解决方案。 请往下看,如果可能的话尽量提供一些验证在我假设我给一个更好的答案(如果这样的答案存在)。

不幸的是,Azure的搜索并没有为您的方案的乱盒的方法。 有可能是周围的工作但是-而不是地区托收像['Region1|5', 'Region2|20']你可以尝试构建文档,使得看上去是['Region1', 'Region1',...., 'Region2', 'Region2', ...]即,使所述收集包含n个的元素Region1和的m个元素Region2 ,其中在情况下,n = 5并且m = 10。

然后,你应该简单地能够使用用户从发起该地区进行搜索,我相信结果应该在此基础上文档的集合列(订购regions )包含特定查询区域的多次出现。

这种方法可以帮助你在两个方面:

  1. 你可以尝试将每个区域作为搜索索引中的列,并使用一些查询来获得你想要的那种结果。 不过,既然你提到可能会有成千上万的这样的区域,它可能不能很好地与我们合作的服务范围 。 然而,如果这不是这种情况,我强烈建议将每个区域为一列,这样就可以通过查询列值/订单。
  2. 随着字符串的方法的复制,你可以有任意大集合,因为我相信Azure的搜索没有任何限制,对于集合中元素的个数。 而且,这里的好处是,如果您的文档将有稀疏数量的区域(即,你可能有地区的1000 100S,但任何给定的文件只会有少数地区列举了),你应该能够达到你想要什么。 然而,如果不是这种情况,这种做法可能不是超好听/效率,甚至可能是痛苦的,你管理。

此外,仅供参考我建议采取看看得分轮廓特征 ,尤其是tag功能,看是否以任何方式可能是对你有用。



文章来源: Azure Search: Order by dynamic data