2016-03-22 40 views
1

Benim nested_filter benim iç içe geçmiş sorgum bile çalışmıyor.Sorgu iç içe geçmiş belgeler üzerinde ElasticSearch

curl -XPUT 'localhost:9200/i_part' -d ' 
{ 
    "mappings": { 
    "part2": { 
     "properties": { 
     "p_name": { 
      "type": "string", "index": "not_analyzed" 
     }, 
     "lineorder": { 
      "type": "nested", 
      "properties": { 
       "lo_quantity": {"type":"integer"}, 
       "lo_discount": {"type":"integer"}, 
       "lo_shippriority": {"type": "string", "index": "not_analyzed"}, 
       "lo_shipmode": {"type": "string", "index": "not_analyzed"}, 
       "customer"{ 
        "properties":{ 
         "c_name": {"type": "string", "index": "not_analyzed"} 
         } 
       } 
      } 
} 
} 
} 
} 
} 

Ama hepsi belgeyi döndürür altında ben o yolu sorguladığınızda: I'have böyle bir eşleme oluşturun.

curl -XPOST 'localhost:9200/i_part/part2/_search?pretty' -d ' 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "nested" : { 
      "path" : "lineorder", 
      "filter": { 
       "and": [ 
       { 
        "match" : { 
        "lineorder.lo_shipmode":"RAIL|" 
        } 
       }, 
       { 
        "match" : { 
        "lineorder.lo_orderpriority":"1-URGENT" 
        } 
       } 
       ] 
      } 
     } 
     } 
    } 
    },  
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "p_partkey": 1 }}, 
     { 
      "nested": { 
      "path": "lineorder", 
      "query": { 
       "bool": { 
       "must": [ 
        {"match": {"lineorder.lo_shipmode":"RAIL|"}}, 
        {"match" : {"lineorder.lo_orderpriority":"1-URGENT"}} 
       ] 
     }}}} 
     ] 
}} 
}' 

veya bu şekilde yanlış yapıyorum ne

curl -XGET 'localhost:9200/i_part/part2/_search?pretty' -d ' 
{ 
    "query": { 
    "nested": { 
     "path": "lineorder", 
     "filter": { 
     "range": { 
      "lineorder.lo_discount": { 
      "gte": 2, 
      "lt": 4 
      } 
     } 
     } 
    } 
    }, 
    "sort": { 
    "lineorder.lo_discount": { 
     "order": "asc",  
     "nested_filter": { 
     "range": { 
      "lineorder.lo_discount": { 
      "gte": 2, 
      "lt": 4 
      } 
     } 
     } 
    } 
    } 
}' 

? Ebeveyn/çocuk değil, yuvalanmış alanları sorgulamak istiyorum çünkü verilerimi çocuğa ebeveyn ile bağlamak için çok büyük.

{ 
    "p_name": "lace spring", 
    "lineorder": [{ 
       "customer": [{ 
        "c_name": "Customer#000014704", 
       }], 
       "lo_quantity": 49, 
       "lo_orderpriority": "1-URGENT", 
       "lo_discount": 3, 
       "lo_shipmode": "RAIL|", 
       "lo_tax": 0 
      }, { 
       "customer": [{ 
        "c_name": "Customer#000026548", 
       }], 
       "lo_quantity": 15, 
       "lo_orderpriority": "3-MEDIUM", 
       "lo_discount": 10, 
       "lo_shipmode": "SHIP|", 
       "lo_tax": 0 
      }]} 
+1

Bu sorgunun geri dönmesini beklediğiniz bir örnek belge ekleyebilir misiniz? – mbudnik

+1

İlk sorgunuzda analiz edilmemiş alanlarda 'match' kullanıyorsunuz. Çalışmayacak. – DrTyrsa

+0

@DrTyrsa Ben de "terimi" denedim, ama aynı sorun. – Raphael

cevap

1

Eğer inner hits kullanmalıdır lineorder kendilerini s filtrelemek isterseniz:

Benim veri böyle bir şeydir.

İlgili konular