2013-05-27 21 views
30

ES'de çok eşleşmeli bir sorgum var ve bir filtre eklemek istiyorum.ElasticSearch, filtreyle çok eşleşmeli?

{ 
    "multi_match" : { 
    "query" : "this is a test", 
    "fields" : [ "subject^2", "message" ] 
    } 
} 

Bu filtrenin eklenmesi sözdizimi nedir?

Denedim:

{ 
    "multi_match" => { 
    "query" => "list", 
    "fields" => [ "username" ] 

    }, 
"filter" => { 
     "term" => { "username" => "slimkicker"} 
    } 
} 

cevap

54

Eğer uygun konumda filtreyi koymak zorunda gerekenler bağlı. İki seçeneğiniz vardır:

kullanın üst düzey bir filtre ve sadece süzülmüş sorgusu kullanın ve her iki arama sonuçlarına filtre uygulamak arama sonuçlarına değil yönleri

{ 
    "query" : { 
     "multi_match" { 
      "query" : "this is a test", 
      "fields" : [ "subject^2", "message" ] 
     } 
    }, 
    "filter" : { 
     "term" : {"username":"slimkicker"} 
    } 
} 

filtre uygula ve yönleriyle

Elasticsearch 5 sözdizimi ile
{ 
    "query" :{ 
     "filtered" : { 
      "query" : { 
       "multi_match" : { 
        "query" : "this is a test", 
        "fields" : [ "subject^2", "message" ] 
       } 
      }, 
      "filter" : { 
       "term" : {"username":"slimkicker"} 
      } 
     } 
    } 
} 
+10

İki seçenek arasındaki farkı biraz daha açıklayabilir misiniz? Kullanım durumları hangi durumlarda kullanılmalıdır? –

+1

, amazon.com gibi yandaki filtrelerle ilgili 2. örnektir. – batmaci

35

bool sorgusu, örneğin kullanımına değişti ( )

+0

Sanırım 2.x.x versiyonundan sonra bu sadece bir değil. – batmaci