2012-05-06 19 views
7

Tôi muốn lọc kết quả của truy vấn tìm kiếm và chỉ truy xuất các kết quả có trường không trốngelasticsearch: chỉ nhận được các phần tử có khóa không trống nào đó từ url

Ví dụ: đưa ra các dữ liệu sau

{ 
    total: 4912, 
    max_score: 1, 
    hits: [ 
{ 
    { 
    _index: "gcba", 
    _type: "bafici", 
    _id: "5a93472b-5db4-4ff9-8c8a-d13158e72d5f-62", 
    _score: 1, 
    _source: { 
     id_film: "23", 
     title: "great film", 
    } 
    }, 
    { 
    _index: "gcba", 
    _type: "bafici", 
    _id: "2732fbf4-4e55-4794-8e98-e5d5fa6a0419-40", 
    _score: 1, 
    _source: { 
     name: "conference", 
     [...] 
    } 
    } 
} 

tôi muốn phát hành một cái gì đó giống như

.../_search?from=1&size=100&q=id_film:'*' 

để chỉ những yếu tố có giá trị id_film

Trả lời

5

ES sẽ chỉ trả lại tài liệu có mà lĩnh vực cụ thể bằng mặc định khi thực hiện truy vấn ký tự đại diện:

% curl -XPUT http://localhost:9200/foo/bar/1 -d '{"id":1,"id_film":23}' 
{"ok":true,"_index":"foo","_type":"bar","_id":"1","_version":1}% 

% curl -XPUT http://localhost:9200/foo/bar/2 -d '{"id":2,"foo":23}' 
{"ok":true,"_index":"foo","_type":"bar","_id":"2","_version":1}% 

% curl "http://localhost:9200/foo/_search?q=id_film:*&pretty=true" 
{ 
    "took" : 2, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "foo", 
     "_type" : "bar", 
     "_id" : "1", 
     "_score" : 1.0, "_source" : {"id":1,"id_film":23} 
    } ] 
    } 
}% 
+0

cảm ơn rất nhiều! đó là chính xác những gì tôi đang nghĩ đến, nhưng tôi đã sai lầm với những thứ '', mà không có dấu ngoặc kép nó hoạt động tuyệt vời! – opensas

4

Bạn cũng có thể sử dụng (hoặc thiếu). Xem ở đây:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html

Chỉ có điều là, đó là một bộ lọc, không phải là một truy vấn. Để làm cho nó hoạt động với phương thức tìm kiếm, bạn cần truy vấn match_all và tồn tại dưới dạng bộ lọc. (hoặc, sử dụng truy vấn constant_score với bộ lọc này được chỉ định bên trong nó)

+0

vâng, bộ lọc có thể không có trong cấu trúc truy vấn, nhưng có thể được lưu trong bộ nhớ cache ... imho phù hợp hơn cho việc sử dụng sản xuất – gatoatigrado

Các vấn đề liên quan