如何使用弹性搜索在C#中获取具有多个条件的请求

时间:2017-04-11 12:28:14

标签: c# select elasticsearch request

我在弹性搜索中有一个基础数据和正确的结果请求。

var searchResults = _client.Search<Apartment>(s => s
    .Size(pageSize)
    .Query(d => d.Term(t => t.Field(apartment => apartment.IsDeleted).Value(false))
                        && (d.Terms(t => t.Field(car => car.Host).Terms(hosts))))
    .Sort(ss => ss.Descending(p => p.CollectedDate))
    .Scroll(TimeSpan.FromSeconds(20))
    .Index(Index));

但是我无法添加新的过滤器来请求。你能帮助我吗?我读了这个Multi Terms search NEST C#并尝试了下一个请求:

var searchResults2 = _client.Search<Apartment>(s => s
.Size(pageSize)
.Query(d => d.Term(t => t.Field(apartment => apartment.IsDeleted).Value(false))
                    && (d.Terms(t => t.Field(car => car.Host).Terms(hosts)))
                    && (d.Terms(t => t.Field(car => car.Transaction).Terms(dealTypeStr))))
.Sort(ss => ss.Descending(p => p.CollectedDate))
.Scroll(TimeSpan.FromSeconds(20))
.Index(Index));

var total2 = searchResults2.Total;

var searchResults3 = _client.Search<Apartment>(s => s
.Size(pageSize)
.Query(q => q
    .Bool(b => b
        .Must(d => d.Term(t => t.Field(apartment => apartment.IsDeleted).Value(false))
                    && (d.Terms(t => t.Field(car => car.Host).Terms(hosts)))
                    && (d.Terms(t => t.Field(car => car.Transaction).Terms(dealTypeStr))))))

.Sort(ss => ss.Descending(p => p.CollectedDate))
.Scroll(TimeSpan.FromSeconds(20))
.Index(Index));
var total3 = searchResults3.Total;


var searchResults4 = _client.Search<Apartment>(s => s
.Size(pageSize)
.Query(q => q
    .Bool(b => b
        .Must(d => d.Term(t => t.Field(apartment => apartment.IsDeleted).Value(false))
                    && (d.Terms(t => t.Field(car => car.Host).Terms(hosts)))
                    && (d.Term(f => f.Transaction, dealTypeStr)))))
.Sort(ss => ss.Descending(p => p.CollectedDate))
.Scroll(TimeSpan.FromSeconds(20))
.Index(Index));
var total4 = searchResults4.Total;

结果空洞。我没纠正? 谢谢

1 个答案:

答案 0 :(得分:0)

看起来dealTypeStr是单个字符串。 在这种情况下,您的请求应如下所示。

var searchResults = _client.Search<Apartment>(s => s
    .Size(pageSize)
    .Query(d => d.Term(t => t.Field(apartment => apartment.IsDeleted).Value(false))
            && d.Term(t => t.Field(apartment => apartment.Transaction).Value(dealTypeStr))
                        && (d.Terms(t => t.Field(car => car.Host).Terms(hosts))))
    .Sort(ss => ss.Descending(p => p.CollectedDate))
    .Scroll(TimeSpan.FromSeconds(20))
    .Index(Index));