gpt4 book ai didi

elasticsearch - 在Nest Elasticsearch中使用 bool 合并查询

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

我需要使用在两个字段上具有多个And / OR条件的NEST客户端从ES获取文档。

我的查询是:

SELECT * FROM Document WHERE (Year!=2012 && Year!=2013 ) AND (Format=".pdf" || Format=".prt" || Format=".jpeg") 

下面是我的代码:
var qc = new List<QueryContainer>();        
foreach (var year in years)// years is the list of years that must not be included
{
qc.Add(Query<Document>.Match(m => m.OnField(p => p.Year).Query(year)));
}

var qF = new List<QueryContainer>();
foreach (var format in txtDocs)// txtDocs is the list of formats that should be included if available
{
qF.Add(Query<Document>.Match(m => m.OnField(p => p.Format).Query(format)));
}

var searchResults = client.Search<Document>(s => s.Index(defaultIndex).From(0).Size(50).
Query(
f => f.Bool(
b => b
.MustNot(qc.ToArray()).Should(qF.ToArray()))));

当我尝试使用此代码时,它可以工作多年,但这些结果必须不会出现在结果中,而是会出现在用户应选择的格式中,尽管可用,但不会显示这些选定的格式。
我还使用了“必须”而不是“应该”,但随后它根本不检索任何内容。

有人遇到过类似的问题吗?

最佳答案

public class Test
{
public int Year { get; set; }
[ElasticProperty(Index = FieldIndexOption.NotAnalyzed)]
public string Format { get; set; }
}

var searchResponse = client.Search<Test>(s => s.Query(q => q
.Bool(b => b
.MustNot(
m => m.Term(t => t.OnField(f => f.Year).Value(2012)),
m => m.Term(t => t.OnField(f => f.Year).Value(2013))
)
.Should(
should => should.Term(t => t.OnField(f => f.Format).Value(".pdf")),
should => should.Term(t => t.OnField(f => f.Format).Value(".prt")),
should => should.Term(t => t.OnField(f => f.Format).Value(".jpeg"))
)
)));

希望能帮助到你。

关于elasticsearch - 在Nest Elasticsearch中使用 bool 合并查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940688/

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