微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何在多个(复杂结构)字段上执行RavenDB查询并返回匹配的值?

我有一个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);
    }
}

原文地址:https://www.jb51.cc/csharp/99090.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐