q03043123 2023-09-05 18:39 采纳率: 0%
浏览 9
已结题

Elastic Search嵌套多重匹配查询

Elastic Search嵌套多重匹配查询

C# 代码写的查询Elastic Search,多值查询如何写?

实体类如下:

/// <summary>
    /// 图像信息类
    /// </summary>
    public class CustomCTImageInfo
    {
        [Text(Name = "PRN")]
        public string PRN { get; set; }

      
        [Number(NumberType.Integer, Name = "ImageMode")]
        public uint ImageMode { get; set; }

        [Nested]
        [PropertyName("Judges")]
        public List<JudgeConclusion> Judges { get; set; }

        [Nested]
        [PropertyName("Checks")]
        public List<CheckConclusion> Checks { get; set; }

        [Nested]
        [PropertyName("AiSusDatas")]
        public List<AiSusData> AiSusDatas { get; set; }
}
 public class AiSusData
    {
        [Date(Name = "RecvTime")]
        public DateTime RecvTime { get; set; }

        [Number(NumberType.Integer, Name = "TypeID")]
        public int TypeID { get; set; } 

        [Text(Name = "TypeName")]
        public string TypeName { get; set; } 

        [Number(NumberType.Integer, Name = "SubTypeID")]
        public int SubTypeID { get; set; }

        [Text(Name = "SubTypeName")]
        public string SubTypeName { get; set; } 

        [Number(NumberType.Integer, Name = "Count")]
        public int Count { get; set; } 

        [Number(NumberType.Integer, Name = "HandleType")]
        public int HandleType { get; set; } 

        [Text(Name = "Description")]
        public string Description { get; set; } 
     
    }

查询AiSusData 中的SubTypeID 在数组中(相当于SQL语句中的 IN)



var response = ESClient.Search<CustomCTImageInfo>(s => s.From((request.CurrentPage - 1)* request.PageSize).Size(request.PageSize)
               .Sort(i => i.Descending(f => f.CreateTime))
               .TrackTotalHits()
               .Query(query: q => q.Bool(m => m.Must(
                  
                   fs => fs.Bool(sh=>sh.Should(
                     
                        f =>
                        {
                            return f.Nested(
                                l => l.Path(j => j.AiSusDatas).Query(p => p.Bool(k => k.Must(
                                    h =>
                                    {
                                        if (string.IsNullOrEmpty(request.AISusDataId.ToString()) ||
                                            request.AISusDataId.ToString().Equals("-1"))
                                        {
                                            return new QueryContainer();
                                        }



                                   **     return h.Terms(o =>
                                          o.Field(n => n.AiSusDatas.First().SubTypeID)
                                              .Terms(AISusDataArray));__**
                                    }

                                )))
                            );


                        }
                       ))


最后的 AiSusDatas 筛选该如何写?


  • 写回答

19条回答 默认 最新

  • 「已注销」 2023-09-05 18:50
    关注

    在C#中,使用NEST库可以方便地与Elasticsearch进行交互。对于嵌套的多重匹配查询,你可以使用BoolQuery来构建。

    以下是一个示例代码,它展示了如何使用NEST库进行嵌套的多重匹配查询:

    using Nest;
    using System;
    
    public class Example
    {
        public void Search()
        {
            var client = new ElasticClient();
    
            var searchRequest = new SearchRequest("your_index")
            {
                Query = new BoolQuery
                {
                    Must = new QueryContainer[]
                    {
                        new MultiMatchQuery
                        {
                            Fields = new[] { "field1", "field2" },
                            Query = "your_query"
                        },
                        new BoolQuery
                        {
                            Must = new QueryContainer[]
                            {
                                new TermQuery { Field = "field3", Value = "term1" },
                                new TermQuery { Field = "field4", Value = "term2" }
                            }
                        }
                    }
                }
            };
    
            var result = client.Search<YourType>(searchRequest);
            // 处理结果...
        }
    }
    

    在这个例子中,我们首先创建了一个SearchRequest,指定了要查询的索引。然后,我们设置QueryBoolQuery,其中包含两个Must条件:一个MultiMatchQuery和另一个BoolQuery。这个BoolQuery又包含两个TermQuery条件。你可以根据需要添加更多的条件。

    注意,你需要将"your_index"、"your_query"、"field1"、"field2"、"field3"和"field4"替换为你的实际值。同时,你需要将YourType替换为你的数据类型的名字。这个类型应该匹配你在Elasticsearch中存储的数据的类型。

    评论

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 赞助了问题酬金15元 9月5日
  • 创建了问题 9月5日

悬赏问题

  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv
  • ¥40 怎样批量对比两个数据库的表差异
  • ¥60 具体分析这篇MVC结构springboot框架的安利代码
  • ¥15 lettuce连接哨兵redis,主从切换异常
  • ¥15 ubuntu出现以下问题
  • ¥15 R语言 survIDINRI包已将生存时间转为数值变量,仍错误 Time variable is not numeric。
  • ¥15 在Starccm中相变材料的物理模型该如何选择?