gpt4 book ai didi

azure - 优化 Azure 认知搜索中的条件查询

转载 作者:行者123 更新时间:2023-12-03 03:40:58 25 4
gpt4 key购买 nike

我们在使用 Azure 搜索其中一个项目时遇到了一个独特的场景。因此,我们的客户希望尊重用户的隐私,因此我们有一个功能,用户可以限制对任何 PII 数据的搜索。因此,如果用户选择了隐私,我们只能使用 UserID 搜索他/她,否则我们可以使用姓名、电话、城市、UserID 等搜索。

选择隐私的 JSON:

{
"Id": "<Any GUID>",
"Name": "John Smith", //searchable
"Phone": "9987887856", //searchable
"OtherInfo": "some info" //non-searchable
"Address" : {}, //searchable
"Privacy" : "yes", //searchable
"UserId": "XXX1234", //searchable
...
}

未选择隐私的 JSON:

{
"Id": "<Any GUID>",
"Name": "Tom Smith", //searchable
"Phone": "7997887856", //searchable
"OtherInfo": "some info" //non-searchable
"Address" : {}, //searchable
"Privacy" : "no", //searchable
"UserId": "XXX1234", //searchable
...
}

现在我们提供搜索服务,将任何searchText作为输入并获取与其匹配的所有数据(所有可搜索字段)。有了上面的场景,

  1. 如果 searchTextUserId 不匹配,我们需要删除那些“隐私”为"is"的结果
  2. 如果 searchTextUserId 匹配,我们会将其包含在结果中。
  3. 如果“隐私”设置为“否”并且searchText与任何可搜索字段匹配,它将包含在结果中。

因此,我们在查询时使用“Lucene Analysers”进行检查,导致查询非常长,如下所示。让我们假设 searchText = "abc"

((Name: abc OR Phone: abc OR UserId: abc ...) AND Privacy: no) OR 
((UserId: abc ) AND Privacy: yes)

这是在我们显示分页结果时完成的,即以 1 - 10、11 - 20 等批处理导入数据,因此,我们在每个查询中获得前 10 条记录以及总结果数。

还有其他优化方法吗?或者 Azure 搜索服务促进了条件查询的任何内部机制?

最佳答案

如果我正确理解你的需求,它可以很容易地解决。您确定哪个属性应该是可搜索的,而不是在您的数据模型中。您不需要构建一个复杂的查询来重复每个属性的最终用户输入。而且您不需要对结果进行任何批处理或处理。

如果 searchText 是您用户的输入,您可以使用以下内容:

(*searchText* AND Privacy:false)

这将搜索所有可搜索字段,但只会返回允许在 PII 数据中搜索的记录。

您还需要允许用户在所有记录中搜索用户 ID,无论记录的 PII 设置如何。为了支持这一点,请将查询扩展到:

(*searchText* AND Privacy:false) OR (UserId:*searchText*)

这允许用户搜索记录中隐私为 false 的所有字段,并且对于所有其他记录,它只允许在 UserId 中搜索。此查询模式将通过一个优化查询来解决您的所有需求。

关于azure - 优化 Azure 认知搜索中的条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71338986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com