2016-11-14 4 views
1

Zweck der Abfrage unten ist es, n Ergebnisse für jedes Kriterium zurückzugeben, d. H. Es muss mit Partnerstandorten 16 übereinstimmen und 'venueTown' oder partnersites 16 entsprechen und 'venueName' entsprechen. Momentan gibt es die Ergebnisse zurück, wo jedes Feld die gleiche Zeichenfolge enthalten muss. In meinem Fall Felder: Name, VenueName und VenueTown müssen Manchester enthalten, aber ich möchte separate Ergebnisse für jedes Paar {(Partnerseiten, VenueName), (Partnersites, VenueTown)}.ElasticSearch kombiniere bedingte Anweisungen 'und' mit 'oder'

{ 
    "size": 0, 
    "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"], 
    "query": { 
     "bool": { 
      "must": [{ 
       "match": { 
        "partnersites": { 
         "query": "16" 
        } 
       } 
      }, { 
       "match": { 
        "name": "manchester" 
       } 
      }, { 
       "match": { 
        "venueName": "manchester" 
       } 
      }, { 
       "match": { 
        "venueTown": "manchester" 
       } 
      }, { 
       "match": { 
        "venueTown": "manchester" 
       } 
      }] 
     } 
    }, 
    "aggs": { 
     "distinct_names": { 
      "terms": { 
       "field": "name.keyword", 
       "size": 10 
      }, 
      "aggs": { 
       "top_tag_hits": { 
        "top_hits": { 
         "size": 1, 
         "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"] 
        } 
       } 
      } 
     }, 
     "distinct_venues": { 
      "terms": { 
       "field": "venueName.keyword", 
       "size": 10 
      }, 
      "aggs": { 
       "top_tag_hits": { 
        "top_hits": { 
         "size": 1, 
         "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"] 
        } 
       } 
      } 
     }, 

     "distinct_towns": { 
      "terms": { 
       "field": "venueTown.keyword", 
       "size": 10 
      }, 
      "aggs": { 
       "top_tag_hits": { 
        "top_hits": { 
         "size": 1, 
         "_source": ["groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "media"] 
        } 
       } 
      } 
     } 
    } 
} 

Antwort

1

Versuchen Sie folgendes:

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "bool": { 
      "should": [ 
       { 
       "bool": { 
        "must": [ 
        { 
         "term": { 
         "partnersites": "16" 
         } 
        }, 
        { 
         "match_phrase_prefix": { 
         "name": "mancheste" 
         } 
        } 
        ] 
       } 
       }, 
       { 
       "bool": { 
        "must": [ 
        { 
         "term": { 
         "partnersites": "16" 
         } 
        }, 
        { 
         "match_phrase_prefix": { 
         "venueName": "mancheste" 
         } 
        } 
        ] 
       } 
       }, 
       { 
       "bool": { 
        "must": [ 
        { 
         "term": { 
         "partnersites": "16" 
         } 
        }, 
        { 
         "match_phrase_prefix": { 
         "venueTown": "mancheste" 
         } 
        } 
        ] 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "distinct_names": { 
     "terms": { 
     "field": "groupedName.keyword", 
     "size": 30 
     }, 
     "aggs": { 
     "top_tag_hits": { 
      "top_hits": { 
      "size": 1, 
      "_source": [ 
       "groupedName", 
       "groupedDisplayName", 
       "groupedUrl", 
       "eventCode", 
       "venueName", 
       "venueTown", 
       "venueId", 
       "media" 
      ] 
      } 
     } 
     } 
    } 
    } 
}