【发布时间】:2021-08-01 08:25:13
【问题描述】:
我正在寻找一种方法来实现搜索的结构排序。我使用 Azure 搜索并拥有索引(简化):
[
{
"id": Guid,
"name": string,
"folderId": Guid
}
]
name 字段是我正在执行搜索查询的字段。还有文件夹——显然,对象所在的文件夹。
假设我有一个文件夹结构:
[
{
"id": "a595885e-520e-4fd2-9bdd-3f494f187b2e",
"name": "folder1"
"searchObjects": [],
"folders": [
{
"id": "f760f2bd-7291-49ed-9be2-9546ce57fb87",
"name": "subfolder1",
"searchObjects": [],
"folders": []
}
]
},
{
"id": "200ff3b6-310a-49d1-ad99-aed6f34a8f38",
"name": "folder2",
"searchObjects": [],
"folders": []
}
]
每个文件夹都有 3000 个可搜索对象。 我想要实现的是我想对搜索结果进行分页并根据文件夹结构检索这些页面。例如,假设我用每个请求查询 5000 个对象。在这种情况下,我会得到:
1 页 - 来自文件夹 1 的 3000 个项目 + 来自子文件夹 1 的 2000 个项目;
2 页 - 来自子文件夹 1 的 1000 个项目 + 来自文件夹 2 的 3000 个项目;
最初的想法是在将可搜索对象放入 Azure 搜索之前计算某个文件夹索引。例如文件夹索引:
[
{
"index": 1
"name": "folder1"
"folders": [
{
"index": 11,
"name": "subfolder1"
},
{
"index": 12,
"name": "subfolder2"
},
{
"index": 13,
"name": "subfolder3"
"folders": [
{
"index": 131,
"name": "subSubfolder1"
}
]
}
]
},
{
"index": 2
"name": "folder2"
"folders": [
{
"index": 21,
"name": "subfolder2"
}
]
}
]
可搜索对象:
[
{
"id": "3d4374ec-18a0-4e5b-bb55-e7576b475cdb",
"name": "this object is in folder1",
"folderIndex": 1
},
{
"id": "3d4374ec-18a0-4e5b-bb55-e7576b475cdb",
"name": "this object is in subSubfolder1",
"folderIndex": 131
},
{
"id": "2c2c02ec-3f57-4c85-886e-df6603718d44",
"name": "this object is in subfolder1",
"folderIndex": 11
},
...
]
这将允许我按文件夹结构的名称和顺序进行搜索:
search=this object&$top=5000&$searchFields=name&$orderby=folderIndex,name
当我在文件夹中放置/更改一个甚至一千个对象时,它工作正常,我只是在 Azure 搜索端索引/重新索引这些对象。但它在规模上不起作用。我可能有数百个文件夹相互折叠,每个文件夹可能包含数千个对象。因此,如果我重新组织文件夹,它就会变得一团糟。我必须重新计算几乎所有的对象,从变化树中的顶部文件夹到底部的叶子。
使用关系结构会更容易,我可以将文件夹及其索引与可搜索对象分开存储,通过文件夹 ID 连接它们并按文件夹索引器排序,但是...
有没有办法做到这一点?
【问题讨论】:
标签: azure search lucene azure-cognitive-search azure-search-.net-sdk