在需要索引的查询中苦苦挣扎

时间:2017-01-12 01:57:46

标签: azure-cosmosdb

我正在使用本地模拟器尝试从地理空间查询返回结果。如果不是因为我刮胡子,我会把头发撕掉。我已经描述了我正在尝试做的事情以及我在这里尝试过的事情: https://social.msdn.microsoft.com/Forums/en-US/79c449c9-4fe7-43cf-ba07-6b168ead60da/struggling-with-this-geospatial-linq-query-?forum=AzureDocumentDB

对于所有圣洁的爱,如果你有建议,请帮忙。关于这个臭名昭着的问题,我的生活正在崩溃。

感谢您提供任何帮助。

-r

2 个答案:

答案 0 :(得分:0)

我相信你可以做一个自连接来压平设备数组并使用'ST_DISTANCE()'。它看起来像这样。

sleep 10

不是100%肯定它会使用索引,但我认为它会。

如果失败了,可能还有另一种方法可以调整您的架构。存储所有设备位置的非规范化多边形。然后,您可以生成一个近似于用户具有指定半径的圆心的多边形。然后,您可以使用try: import sys # For Python 3.0 and later from urllib.request import urlopen except ImportError: # Fall back to Python 2's urllib2 import sys from urllib2 import urlopen def fetch_words(url): html = urlopen(url) print(html.read()) story_words = [] for line in html: line_words = line.decode('utf-8').split() for word in line_words: story_words.append(word) return story_words def print_items(items): for item in items: print(item) def main(): url = sys.argv[1] words = fetch_words(url) print_items(words) if name == '__main__' main() 使用此模拟圆圈对所有设备的非规范化多边形进行查询。

我没有试过这个,所以我不确定它会使用索引,但我认为这很有可能。此外,非规范化多边形的组合可能很棘手。我建议您找到设备的中心,并使多边形为星形,从每个设备返回到中心或靠近中心,然后返回到下一个设备等。这样,它就不太可能返回结果,其中用户位置在两个设备之间,但都不在用户的指定半径范围内。

答案 1 :(得分:0)

我真的很感激Larry的建议。我实际上能够使用我的查询。事实证明,我被Azure门户所破坏,自动为我和本地DocumentDB模拟器创建策略。所以我采用了Azure创建的策略并将其粘贴到我的模拟器中,我的上一个查询按预期工作。作为参考,这是政策:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*",
  "indexes": [
    {
      "kind": "Range",
      "dataType": "Number",
      "precision": -1
    },
    {
      "kind": "Range",
      "dataType": "String",
      "precision": -1
    },
    {
      "kind": "Spatial",
      "dataType": "Point"
    }
  ]
}
 ],
 "excludedPaths": []
}

再次感谢!非常感谢!