2014-10-27 15 views
10

Tôi có một ứng dụng Net cố gắng để lấy dữ liệu từ một cửa hàng tài liệu elasticsearch, có thành tích trong cấu trúc sau:Cách viết truy vấn phạm vi ngày trong ứng dụng Nest ElasticSearch?

{ 
    "_index": "TestIndex", 
    "_type": "amqp", 
    "_id": "123", 
    "_source": { 
    "@timestamp": "2014-10-27T01:31:54.780Z",  
    "type": "amqp",   
    "LogGenerationTime": "2014-10-26T21:31:54.780",  
    "ThreadID": "6", 
    "ProcessID": "8136", 
    "SessionID": "xyz", 
    "UserID": "12345678", 
    }, 
} 

Tôi muốn lấy tất cả các hồ sơ với LogGenerationTime trong 20 phút cuối cùng. Đây là truy vấn mà tôi đã viết cho đến nay nhưng dường như không trả lại bất kỳ dữ liệu nào:

var format = "yyyy-MM-dd'T'HH:mm:ss.fff"; 
    var lowerBound = DateTime.Now.AddMinutes(-20); 
    ISearchResponse<Amqp> resultSet = _elasticSearchClient.Search<Amqp>(q => q.Query 
        (p => p.Range 
         (v => v.OnField 
          (x => x.LogGenerationTime).GreaterOrEquals(lowerBound, format)))); 

Ai đó có thể vui lòng viết truy vấn chính xác để tìm nạp kết quả mong đợi? Cảm ơn!

+0

truy vấn của bạn trông khá nhiều chính xác. Tôi đề nghị sử dụng fiddler để xem các json rằng nó gửi đến ES để cố gắng xác định vấn đề. – jhilden

Trả lời

8

Nhìn vào mã nguồn, có hai tình trạng quá tải của phương pháp OnField. Khi tôi sử dụng tham số biểu thức Linq, truy vấn không trả về bất kỳ dữ liệu nào. Nhưng tôi đã có thể làm cho nó làm việc với quá tải khác, trong đó có giá trị chuỗi, nơi tôi đi qua tên trường của tài liệu elasticsearch như là một chuỗi. Đây là truy vấn trả về kết quả mong đợi:

var resultSet = _elasticSearchClient.Search<Amqp>(q => q.Query 
       (p => p.Range(v => v.OnField("LogGenerationTime").GreaterOrEquals(lowerBound))).Size(10000)); 

Trông giống như lỗi trong khung nhưng không hoàn toàn chắc chắn.

+0

NEST theo biểu thức thuộc tính camelCases mặc định, xem [câu trả lời này tại đây] (http://stackoverflow.com/questions/26434104/elasticsearch-net-client-cant-do-basic-search/26450038#26450038) cách bạn có thể ghi đè lên điều này hành vi. Chuỗi nguyên văn hoặc [thuộc tính được đánh dấu thuộc tính] (https://github.com/elasticsearch/elasticsearch-net/blob/develop/src/Nest/Domain/Mapping/Attributes/ElasticPropertyAttribute.cs#L12) luôn được ưu tiên. –

1

Các mã sau đây làm việc cho tôi:

Range(r => r.GreaterOrEquals(lowerBound).Format("MM/dd/yyyy").OnField(LogTime)) 
Các vấn đề liên quan