【问题标题】:Search in nested json (Azure Search)在嵌套 json 中搜索(Azure 搜索)
【发布时间】:2019-01-03 08:00:51
【问题描述】:

我有带有 JSON 的 CosmosDB (documentDB),看起来像这样:

{
   "id": "59082f71-def1-47cc-j6w2-3fd8c0831e9c",  
   "name": "Bilbo",
   "address": 
   {  
    "street": "bla-bla-bla",        
    "city": "London",   
    "country": "Great Britain"
   }
}

但是当我尝试使用 Azure 搜索时,我似乎无法将 Edm.ComplexType 用作 it is not supported 而且我不能使用 Collection(Edm.String) 因为我有多个字段。

这是我尝试获取字段的方式:

SELECT c._rid, c.id, c.name, c.address.street as street, c.address.city as city, c.address.country as country FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

【问题讨论】:

  • 您是否希望仅使用 JSON 索引特定参数?如果没有,为什么不将整个文档索引为 Edm.String?
  • @Omri374,我无法访问嵌套字符串。我曾尝试使用SELECT * FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts,但没有运气。
  • 您查询的是 Azure 搜索还是 CosmosDB?你的索引是怎么定义的?

标签: azure-cognitive-search


【解决方案1】:

您使用的 SELECT 查询看起来不错。如果您通过 Azure 门户(而不是通过 REST API)定义了 Azure 搜索的数据源\索引器,您可能遇到了一个已知问题,即数据源查询被忽略 - 我们目前正在努力解决这个问题。

同时,这里有一个解决方法:

  1. 确保您的数据源查询确实被忽略了: 在 Azure 门户中,转到搜索服务的“概述”页面,单击“数据源”选项卡并选择您的数据源。 在数据源页面中,选择“编辑” - 您是否在“查询”文本框中看到正确的 SELECT 查询?如果您的查询没有更正,请点击“确定”
  2. 确保您的索引包含您想要\选择的其他字段(街道、城市和国家/地区):再次转到“概览”页面,从“索引”选项卡中选择您的索引,然后选择索引页面中的“字段”选项卡 - 如果缺少某些字段,您可以添加它们并单击“保存”
  3. 重新运行或重新创建您的索引器:您可以重新运行现有的索引器,方法是返回“概览”页面,从“索引器”选项卡中选择您的索引器,点击“重置”,然后点击“运行” ” 或者,您可以删除现有的索引器(和索引,如果您没有任何需要的数据),然后通过单击“概览”页面中的“导入数据”创建一个新的索引器 - 这次选择“现有数据”第一步中的来源”。

我希望这会有所帮助。

【讨论】:

  • c._ts 在查询中丢失。当我按照您的建议检查数据源时,我发现确实缺少选择查询。因此,我已将其添加回来,并在保存后收到查询中缺少 _ts 的消息
猜你喜欢
  • 2015-06-04
  • 1970-01-01
  • 2016-10-09
  • 2023-03-20
  • 1970-01-01
  • 2020-09-06
  • 2019-06-08
  • 1970-01-01
  • 2018-02-20
相关资源
最近更新 更多