我发帖以查看是否有人有解决方案,或者可以提供一些有关建模某些数据的指导,以便在天蓝色搜索中使用。
问题域
我目前正在使用DocumentDB来建模我想要搜索的一些数据。我的文件,我将称之为"实体A"目前看起来像:
{
_id, //key - Guid
name, //searchable - String
description, //searchable - String
tags: [ "T1", "T2", ...] //facet - Collection(String)
locations: [
{
coordinate, //filter - GeoLocation (lat & long)
startDateTime, //filter - DateTimeOffset
endDateTime //filter - DateTimeOffset
},
...
]
...
},
...
关系: 标签0 ... n实体A&位置0 ... n实体A
展平实体A并为标签的名称,描述和方面设置简单的索引和查询很好,效果很好。
问题在于尝试向索引添加位置。有效地我想搜索(用自然语言)是: 对于给定的术语,找到与x开始日期和y结束日期重叠的坐标附近的所有实体
从我在网上找到的内容 - 展平位置只有在它们成为字符串时才会起作用。
https://blogs.msdn.microsoft.com/kaevans/2015/03/09/indexing-documentdb-with-azure-seach/ https://docs.microsoft.com/en-us/azure/search/search-howto-index-json-blobs
这似乎失去了能够执行地理距离和日期范围查询的能力。
当前的想法
将实体A文档拆分为两个集合
新的实体A文件:
{
_id, //key - Guid
name, //searchable - String
description, //searchable - String
tags: [ "T1", "T2", ...] //facet - Collection(String)
...
},
和多个位置实体
{
_id,
documentId, //relates to Document._id
coordinate,
startDate,
endDate
}
问题:
最好有两个索引 - 一个用于新实体A,一个用于位置,然后加入结果?
我认为这是多租户搜索 https://docs.microsoft.com/en-us/azure/search/search-modeling-multitenant-saas-applications
有没有人知道实现这个的例子?
赞成
缺点
或
更好地完全"反转"实体A和位置实体,即
之类的东西{
_id,
documentDBId, //relates to Document._id
coordinate,
startDate,
endDate,
name,
description,
tags: []
...
}
赞成
缺点
或
还有其他选择吗?
谢谢,我很乐意澄清是否需要
答案 0 :(得分:0)
我倾向于你的第二个完全扁平或倒置的选项
{
_id,
documentDBId, //relates to Document._id
coordinate,
startDate,
endDate,
name,
description,
tags: []
...
}
我的主要论点是分页。如果您有两个搜索,并且想要在页面上返回10个结果,那么您每次搜索会得到多少结果,更重要的是,您从哪里开始搜索第2页?
也存在对结果进行排名的问题,但这些问题比分页更容易管理。