gpt4 book ai didi

c# - 如何检查列表中是否包含NEST中的术语?

转载 作者:行者123 更新时间:2023-12-02 22:19:29 25 4
gpt4 key购买 nike

我有如下所示的查询:

var queryResult =
await
elastic.SearchAsync<CounterData>(s => s
.Query(q => q
.Bool(b => b
.Must(
m => m.ConstantScore(c => c
.Filter(f => f
.Term(x => x.CounterId, maxList))
),
m => m.ConstantScore(c => c.
Filter(f => f
.Term(x => x.Type, counterType))),
m => m.ConstantScore(c => c.
Filter(f => f.
DateRange(d => d.
GreaterThanOrEquals(lowerBound).Field(r => r.Date)))))))
.AllTypes()
.Scroll("1m")
.Size(10000));

其中 maxList是整数列表。我想检查该术语是否在列表中,但是看起来不起作用。

有什么想法可以检查该术语是否与列表中的任何元素匹配?

最佳答案

像下面这样的事情会做到的

var maxList = new[] { 1, 2, 3, 4, 5};
var counterType = "counter-type";
var lowerBound = DateTime.UtcNow.Date.AddDays(-7);

var queryResult = client.Search<CounterData>(s => s
.Query(q => +q
.DateRange(d => d
.Field(r => r.Date)
.GreaterThanOrEquals(lowerBound)
) && +q
.Term(x => x.Type, counterType) && +q
.Terms(t => t
.Field(x => x.CounterId)
.Terms(maxList)
)
)
.AllTypes()
.Scroll("1m")
.Size(10000)
);

需要强调的几件事

应用于 +
  • QueryContainerDescriptor<T>一元运算符是将查询包装在bool filter查询中的简写。我认为这是您所需要的,因为您无需计算分数,而只想查找谓词的匹配项。
  • &&对于QueryContainer重载,因此当应用于两个QueryContainer时,它是带有两个必须查询子句的bool must查询的简写。但是,在此示例中,所有查询都应用了+一元运算符,因此bool filter查询也是如此,因此将&&一起作为过滤器查询。
  • 使用“滚动”(即指定Size()时间)时传递给Scroll()的值是每次滚动从每个分片的获取的文档数,而不是每次滚动的总文档数。因此,文档总数将为Size() * number of shards。每卷可能有很多文档。
  • 使用 terms query查找在字段中与术语列表(未分析)中的任何一个匹配的文档。

  • 最终查询json看起来像
    POST http://localhost:9200/examples/_search?scroll=1m 
    {
    "size": 10000,
    "query": {
    "bool": {
    "filter": [
    {
    "range": {
    "date": {
    "gte": "2016-08-04T00:00:00Z"
    }
    }
    },
    {
    "term": {
    "type": {
    "value": "counter-type"
    }
    }
    },
    {
    "terms": {
    "counterId": [
    1,
    2,
    3,
    4,
    5
    ]
    }
    }
    ]
    }
    }
    }

    关于c# - 如何检查列表中是否包含NEST中的术语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38896849/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com