c# – 如何在多个(复杂结构)字段上执行RavenDB查询并返回匹配的
发布时间:2020-12-15 07:40:25 所属栏目:百科 来源:网络整理
导读:我有一个RavenDB 3.5集合“Municipalities”,其文档结构如下: { "Name": ...,...,"Districts": [ { "Name": ...,... } ]} 请注意,zone属性也可以为null. 现在我正在开发一个类型头功能,您可以在其中搜索市政名称和地区名称.所以我想(通配符全部)查询两个字
我有一个RavenDB 3.5集合“Municipalities”,其文档结构如下:
{ "Name": ...,...,"Districts": [ { "Name": ...,... } ] } 请注意,zone属性也可以为null. 现在我正在开发一个类型头功能,您可以在其中搜索市政名称和地区名称.所以我想(通配符全部)查询两个字段,并获取匹配的值.所以我不想要整个文档,因为如果匹配是在区域名称上,我不能轻易返回该值. 我已经尝试了几个选项.Search()和.Suggest()但是无法完全实现. 解决方法
为了搜索市政名称和地区名称,您可以建立一个
MultiMap index,它将从同一个集合中映射两次名称,一次来自市政名称,一旦它在地区名称上扇出.
对索引的查询结果将是包含所有数据的文档.为了从索引中获取特定结果,您可以在索引内检索store the data.这样,只返回预期的数据,而不是全部文档. public class MunicipalitiesAndDistrictsNamesIndex : AbstractMultiMapIndexCreationTask<MunicipalitiesAndDistrictsNamesIndex.Result> { public class Result { public string Name { get; set; } public string Value { get; set; } } public MunicipalitiesAndDistrictsNamesIndex() { AddMap<Municipality>(municipality => from m in municipalities select new { m.Name,m.Value,}); AddMap<Municipality>(municipality => from m in municipalities from d in m.Districts select new { d.Name,d.Value,}); // mark 'Name' field as analyzed which enables full text search operations Index(x => x.Name,FieldIndexing.Search); // storing fields so when projection // requests only those fields // then data will come from index only,not from storage Store(x => x.Name,FieldStorage.Yes); Store(x => x.Value,FieldStorage.Yes); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |