gpt4 book ai didi

azure-cognitive-search - 如何在 Azure 搜索中筛选数组

转载 作者:行者123 更新时间:2023-12-01 10:27:18 26 4
gpt4 key购买 nike

我的索引中有以下数据,

{
"name" : "The 100",
"lists" : [
"2c8540ee-85df-4f1a-b35f-00124e1d3c4a;Bellamy",
"2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike",
"2c8540ee-85df-4f1a-b35f-00155c02e581;Clark"
]

}
我必须获取列表中包含 Pike 的所有文档。
尽管完整搜索查询适用于 Any 我无法获得 contains 工作。
$filter=lists/any(t: t eq '2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike')
但是,我不确定如何仅使用 Pike 进行搜索。
$filter=lists/any(t: t eq 'Pike')
我猜 eq 寻找全文搜索,有没有办法使用给定的数据结构,我应该让这个查询工作。
目前,字段列表没有可搜索的属性,只有可过滤的属性。

最佳答案

eq 运算符查找精确的、区分大小写的匹配项。这就是它与 'Pike' 不匹配的原因。您需要构建索引,以便可以轻松找到诸如“Pike”之类的术语。您可以通过以下两种方式之一完成此操作:

  • 在索引​​文档时将 GUID 与名称分开。因此,不是将 "2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike" 索引为单个字符串,您可以将它们作为单独的字符串索引到同一个数组中,或者如果需要按位置关联它们,也可以在两个不同的集合字段(一个用于 GUID,一个用于名称)中索引它们。
  • 如果字段是 searchable ,您可以在过滤器中使用 new search.ismatch function 。假设该字段使用标准分析器,全文搜索将 word-break 放在分号上,因此您应该能够仅搜索“Pike”并获得匹配项。语法如下所示: $filter=search.ismatch('Pike', 'lists') (如果您的过滤器只需要查找“Pike”,您就可以将 searchsearchFields 参数用于搜索 API 而不是 $filter 。)如果“列表”字段尚未可搜索,您需要添加新字段并重新索引“列表”值,或者使用新字段定义从头开始重新创建索引。

  • 更新
    API 版本 2019-05-06 及更高版本中提供了一种解决此类问题的新方法。您现在可以使用复杂类型来表示结构化数据,包括在集合中。对于原始示例,您可以像这样构造数据:
    {
    "name" : "The 100",
    "lists" : [
    { "id": "2c8540ee-85df-4f1a-b35f-00124e1d3c4a", "name": "Bellamy" },
    { "id": "2c8540ee-85df-4f1a-b35f-00155c40f11c", "name": "Pike" },
    { "id": "2c8540ee-85df-4f1a-b35f-00155c02e581", "name": "Clark" }
    ]
    }
    然后像这样直接查询 name 子字段:
    $filter=lists/any(l: l/name eq 'Pike')
    复杂类型的文档是 here

    关于azure-cognitive-search - 如何在 Azure 搜索中筛选数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46422230/

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