2017-04-21 190 views
0

我想從彈性搜索的結果使用NEST API日期的預定義日期範圍,但我不管理。此示例代碼我試圖檢索一週的數據,但它忽略了我的日期篩選並返回比我的初始日期更舊的數據。NEST elasticsearch DateRange查詢

在此先感謝您的幫助!

var node = new Uri("http://localhost:9200"); 
var settings = new ConnectionSettings(node); 
var client = new ElasticClient(settings); 

settings.DefaultIndex("wholelog-2017.04*"); 

client.CreateIndex("wholelog-2017.04*", 
create => create.Mappings(
    mappings => mappings.Map<LogLine>(type => 
     type.AutoMap() 
     ) 
     )); 

DateTime InitDate = DateTime.Now.AddDays(-7); 

var filterClauses = new List<QueryContainer>(); 

filterClauses.Add(new DateRangeQuery 
{ 
    Field = new Field("logTime"), 
    LessThanOrEqualTo = DateTime.Now, 
    GreaterThanOrEqualTo = InitDate 
}); 

var searchRequest = new SearchRequest<LogLine>() 
{ 
    Size = 10000, 
    From = 0, 
    Scroll = "1m", 
    Query = new BoolQuery 
    { 
      Filter = filterClauses 
    } 
}; 

var searchResult = client.Search<LogLine>(searchRequest); 


[ElasticsearchType(Name="logLine")] 
public class LogLine 
{ 
    public string Message {get;set;} 
    public DateTime logTime {get;set;} 
    public string type {get;set;} 
    public string logServer {get;set;} 
} 

logstash配置文件

output { 
    elasticsearch{ 
     hosts => "localhost" 
     #user => #### 
     #password => #### 
     index => "wholelog-%{+YYYY.MM.dd}" 
    } 
} 
+0

你能提供你的映射和這個查詢的響應嗎? – Random

+0

感謝您的幫助,我添加了映射。這是一個自動填充的POCO類。我已經用同樣的結果嘗試了DateMath和DateTime。數據映射正確,我可以通過調試看到LogLine對象被正確填充。我不知道爲什麼日期查詢不起作用... – seiken

回答

0

我假設你沒有明確地把你的映射和剛開始添加文件到您的索引。嘗試創建一個像這樣的新索引

client.CreateIndex(indexName, 
    create => create.Mappings(
     mappings => mappings.Map<LogLine>(
      type => type.AutoMap() 
     ) 
    ) 
); 

並使用DateTime代替您的字段。 DateMath是用於構建搜索查詢

[ElasticsearchType(Name = "logLine")] 
public class LogLine 
{ 
    public string Message { get; set; } 
    public DateTime logTime { get; set; } 
    public string type { get; set; } 
    public string logServer { get; set; } 
} 

明確地把你的映射嘗試添加文檔和搜索針對新的索引之後。

+0

謝謝隨機爲你的幫助,我想我幾乎在那裏,但仍然沒有得到它的工作。我已經用你的建議更新了代碼,並且用NEST doc嘗試了許多不同的方法,但是使用了GreaterThanOrEqualTo過濾器,我仍然沒有得到任何文檔。我更新了我的第一條評論的代碼,以防萬一你能看到我做錯了什麼。再次感謝! – seiken

+0

因爲它包含'*'字符,所以我無法用您的示例中的名稱創建索引。但是,如果我使用不同的名稱創建索引,例如'my_index',它會按預期過濾我的文檔。請檢查NEST客戶端返回的對象的'ServerError'屬性。如果一切正常,索引名稱也可以,請添加您的代碼索引文件 – Random

+0

我這樣做是因爲我使用logstash將數據插入到elasticsearch中。如果將代碼添加到原始註釋中以顯示我的索引是如何創建的。 – seiken