2016-11-14 4 views
1

を組み合わせます。以下のクエリの目的は、条件ごとに結果を返すことです。つまり、パートナー16と一致し、' venueTown 'またはpartnersites 16と一致し、' venueName 'と一致する必要があります。現時点では、各フィールドに同じ文字列を含める必要がある場合に結果を返します。私の場合、名前、venueNameとvenueTownにはmanchesterが含まれていなければなりませんが、{(partnersites、venueName)、(partnersites、venueTown)}のペアごとに別々の結果が必要です。ElasticSearchは、条件文と 'with'または '

{ 
    "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"] 
        } 
       } 
      } 
     } 
    } 
} 

答えて

1

これを試してみてください:

{ 
    "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" 
      ] 
      } 
     } 
     } 
    } 
    } 
}