2017-09-26 60 views
1

我在指数以下数据的数组,如何过滤Azure中搜索

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

} 

我必须得到所有在列表中有派克在它的文件。

尽管完整的搜索查询适用于任何我无法获取包含的工作。

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

但是我不知道如何与派克只搜索。

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

我猜EQ查找全文搜索,有没有办法用给定的数据结构,我应该让这个查询工作。

当前字段列表没有可搜索的属性只有可过滤的属性。

回答

2

eq运算符会查找确切的区分大小写的匹配项。这就是为什么它不符合'Pike'。您需要构建您的索引,以便可以轻松找到像“派克”这样的术语。您可以通过以下两种方法之一完成此操作:

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

谢谢我将该字段设置为可搜索并使用$ filter ...第一种方法在应用程序代码中有很多残留效应。谢谢 – TBA