You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在RavenDB中查询嵌套集合:通过Lucene扩展筛选商品名称

如何在Lucene中筛选Store的关联商品名称?

我来帮你搞定这个商品名称筛选的需求!其实针对嵌套集合的字段搜索,结合你用的DocumentQuery API,处理起来很直接,只需要在原有的搜索链中添加针对Products.Name的搜索条件就行。

修改后的完整筛选方法

public IEnumerable<Store> Filter(string term = null)
{
    var query = session.Advanced.DocumentQuery<Store>();
    
    if (!string.IsNullOrEmpty(term))
    {
        var search = $"*{term}*";
        var escapeQueryOptions = EscapeQueryOptions.AllowAllWildcards;
        
        query = query
            .Search(n => n.Name, search, escapeQueryOptions)
            .OrElse()
            .Search(n => n.Url, search, escapeQueryOptions)
            .OrElse()
            .Search(n => n.Address, search, escapeQueryOptions)
            .OrElse()
            // 新增:针对商品名称的模糊搜索
            .Search(n => n.Products.Select(p => p.Name), search, escapeQueryOptions);
    }
    
    return query;
}

关键说明

  • 嵌套集合字段的处理:你的Store类包含ICollection<Product>,底层Lucene索引会自动将集合中每个Product的Name字段扁平化存储。通过n => n.Products.Select(p => p.Name)这个表达式,框架会自动解析为搜索所有关联商品的名称——只要有任意一个商品名称匹配搜索词,对应的Store就会被筛选出来。
  • 索引配置注意:如果用的是自动索引(比如RavenDB默认索引),系统会自动包含Products.Name字段,无需额外配置;如果是手动创建的索引,需要确保在索引定义中显式添加Products.Name字段,否则搜索会失效。
  • 性能优化建议:你当前用的*term*前后通配符搜索虽然灵活,但对性能影响较大。如果业务允许,建议改成前缀搜索(term*),或者配置合适的文本分析器来实现更高效的模糊匹配。

内容的提问来源于stack exchange,提问作者yoliva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:22:03