독점 여러 또는 필터 원시 쿼리를 다음과 같이 허용되었다부울 쿼리에서 여러 배타적 OR 필터는 1.x에서에서 즉 둥지의 이전 버전에서
orFilters가 더 이상 2.X에서 권장하는대로 무엇을 할 수 이것의 대용품이 되십시오. Bool Query에 Must와 함께 multiple exclusive should (s) (orfilters)를 갖는 방법? 1.x에서에서
원시 쿼리 같은
{
"bool": {
"must": [
{
"bool": {
"must": [
{
"term": {
"EntityType": "ITSTrucks"
}
},
{
"or": {
"filters": [
{
"term": {
"AvailableDate": 36523
}
},
{
"range": {
"AvailableDate": {
"gte": "42036"
}
}
}
],
"_name": "date"
}
},
{
"or": {
"filters": [
{
"geo_distance": {
"OriginCoordinate": "42.815656,-73.942324",
"distance": "100miles",
"distance_type": "plane"
}
}
],
"_name": "OriginOrFilter"
}
},
{
"or": {
"filters": [
{
"term": {
"IsOpen": true
}
},
{
"term": {
"IsDestinationBoundaryNull": true
}
}
],
"_name": "DestinationOrFilter"
}
}
]
}
}
]
}
}
윌 뭔가?
BoolQueryDescriptor<AvailableTrucks> queryParameterMust= new BoolQueryDescriptor<AvailableTrucks>();
BoolQueryDescriptor<AvailableTrucks> queryParameterShouldFirst= new BoolQueryDescriptor<AvailableTrucks>();
BoolQueryDescriptor<AvailableTrucks> queryParameterShouldSecond= new BoolQueryDescriptor<AvailableTrucks>();
BoolQueryDescriptor<AvailableTrucks> queryParameterShouldThird= new BoolQueryDescriptor<AvailableTrucks>();
if (mustfc.Count > 0)
{
queryParameterMust.Must(mustfc.ToArray());
}
if (shouldQueryListFirst.Count > 0)
{
queryParameterShouldFirst.Should(shouldQueryListFirst.ToArray());
}
if (ShouldQueryListSecond.Count > 0)
{
queryParameterShouldSecond.Should(ShouldQueryListSecond.ToArray());
}
if (ShouldQueryListThird.Count > 0)
{
queryParameterShouldThird.Should(ShouldQueryListThird.ToArray());
}
elasticClient.Search<Truck>(s => s.Query(f => f.Bool(c => c.Must(u => u.MatchAll()).Filter(q => q.Bool(b => queryParameterMust && queryParameterShouldFirst && queryParameterShouldSecond && queryParameterShouldThird)))))>Index("Trucks")
,하지만 당신은 AND (수행해야합니다), OR (정상적으로) 및 NOT :
당신이 시도 할 수 NEST를 사용하여 쿼리를 작성하려면 당신은 당신 자신의 EXOR를 만들 수 있습니다. EXOR b == (a AND NOT b) 또는 (b AND NOT a) – kiml42