如何在Azure搜索中过滤数组

TBA*_*TBA 3 azure-cognitive-search azure-search-.net-sdk

我在索引中有以下数据,

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

}
Run Code Online (Sandbox Code Playgroud)

我必须得到列表中有Pike的所有文档.

虽然完整的搜索查询适用于任何我无法得到包含工作.

$filter=lists/any(t: t eq '2c8540ee-85df-4f1a-b35f-00155c40f11c;Pike')
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何只用Pike搜索.

$filter=lists/any(t: t eq 'Pike')

我想eq寻找全文搜索,有没有任何方式使用给定的数据结构我应该使这个查询工作.

目前,字段列表没有可搜索的属性,只有可过滤的属性.

Bru*_*ton 5

eq运营商寻找确切的,区分大小写匹配.这就是它不匹配的原因'Pike'.您需要构建索引,以便可以轻松找到像"Pike"这样的术语.您可以通过以下两种方式之一完成此任务:

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