使用Azure搜索在特定字段中搜索特定值

时间:2018-08-07 16:40:36

标签: azure-search

我的数据存储在Azure Search中。在我的结构中,有很多字段,我必须使用其中两个进行过滤或搜索。

其中一个被Type定义为Edm.String,另一个被memberOf定义为Collection(Edm.String)

Type的值类似于private:TextmemberOf的值诸如my.com/field/F001

我要应用过滤器:

filter=Type:'private:Text' AND memberOf:'my.com/field/F001'

结果,我收到了所有记录。我阅读了Microsoft的文档,但找不到解决方案。

在我的代码中,我有

SearchParameters sp = new SearchParameters()
{
    SearchMode = SearchMode.Any,
    Skip = currentPage - 1,
    IncludeTotalResultCount = true
};

if (!string.IsNullOrEmpty(searchQuery))
    sp.Filter = searchQuery;

DocumentSearchResult<VuSearchData> result = 
         await client.Documents.SearchAsync<VuSearchData>(searchText, sp);

谢谢。

1 个答案:

答案 0 :(得分:1)

过滤器的语法与全文搜索的语法不同。过滤器使用OData语法。 here记录了Azure搜索支持的OData子集。

要执行的过滤器采用OData语法,如下所示:

Type eq 'private:Text' and memberOf/any(m: m eq 'my.com/field/F001')

请注意使用any和lambda表达式,因为memberOf是一个收集字段。