我的文档组成的Azure的搜索索引,可以“出现”在多个区域任意次数。 例如Document1
具有5只出现在Region1
,20只出现在Region2
。 Document2
有54次出现在Region1
和10只出现在Region3
。 Document3
有10只出现在Region3
。 我们要使用Azure的搜索搜索和建议,但立足于区域出现次数的顺序。 例如,对于搜索Document
从用户Region1
应在顺序返回Document2
, Document1
, Document3
因为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的搜索。 请注意,区域的数量是有可能在几十万。 我行不断变化的地区为中心点和使用地理空间功能来代替,但我还是不明白如何打好数据或查询。
什么是构建索引以及如何将一个使查询尽可能最好的方式是什么?
文艺青年最爱的 - 有可能是基于一些假设,我对你的解决方案。 请往下看,如果可能的话尽量提供一些验证在我假设我给一个更好的答案(如果这样的答案存在)。
不幸的是,Azure的搜索并没有为您的方案的乱盒的方法。 有可能是周围的工作但是-而不是地区托收像['Region1|5', 'Region2|20']
你可以尝试构建文档,使得看上去是['Region1', 'Region1',...., 'Region2', 'Region2', ...]
即,使所述收集包含n个的元素Region1
和的m个元素Region2
,其中在情况下,n = 5并且m = 10。
然后,你应该简单地能够使用用户从发起该地区进行搜索,我相信结果应该在此基础上文档的集合列(订购regions
)包含特定查询区域的多次出现。
这种方法可以帮助你在两个方面:
- 你可以尝试将每个区域作为搜索索引中的列,并使用一些查询来获得你想要的那种结果。 不过,既然你提到可能会有成千上万的这样的区域,它可能不能很好地与我们合作的服务范围 。 然而,如果这不是这种情况,我强烈建议将每个区域为一列,这样就可以通过查询列值/订单。
- 随着字符串的方法的复制,你可以有任意大集合,因为我相信Azure的搜索没有任何限制,对于集合中元素的个数。 而且,这里的好处是,如果您的文档将有稀疏数量的区域(即,你可能有地区的1000 100S,但任何给定的文件只会有少数地区列举了),你应该能够达到你想要什么。 然而,如果不是这种情况,这种做法可能不是超好听/效率,甚至可能是痛苦的,你管理。
此外,仅供参考我建议采取看看得分轮廓特征 ,尤其是tag
功能,看是否以任何方式可能是对你有用。