我的数据存储在Azure Search
中。在我的结构中,有很多字段,我必须使用其中两个进行过滤或搜索。
其中一个被Type
定义为Edm.String
,另一个被memberOf
定义为Collection(Edm.String)
。
Type
的值类似于private:Text
,memberOf
的值诸如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);
谢谢。
答案 0 :(得分:1)
过滤器的语法与全文搜索的语法不同。过滤器使用OData语法。 here记录了Azure搜索支持的OData子集。
要执行的过滤器采用OData语法,如下所示:
Type eq 'private:Text' and memberOf/any(m: m eq 'my.com/field/F001')
请注意使用any
和lambda表达式,因为memberOf
是一个收集字段。