2017-04-21 26 views
0

NEST APIを使用して日付の定義済み範囲でelasticsearchから結果を取得しようとしていますが、管理しません。このサンプルコードでは、1週間のデータを取得しようとしていますが、私の日付フィルタを無視しています。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のドキュメントでさまざまな方法を試しましたが、GreaterThanOrEqualToフィルタを適用してもまだドキュメントがありません。私はあなたが私が間違っていることを見ることができる場合に備えて、私の最初のコメントでコードを更新しました。再度、感謝します! – seiken

+0

'*'文字が含まれているため、あなたの例の名前でインデックスを作成できませんでした。しかし、 'my_index'のように別の名前のインデックスを作成した場合、私のドキュメントは期待どおりにフィルタリングされます。 NESTクライアントから返されたオブジェクトの 'ServerError'プロパティを確認してください。すべてがうまくいっていて、インデックス名もOKなら、インデックス文書のコードを追加してください。 – Random

+0

これは、logstashを使用してelasticsearchにデータを挿入しているためです。オリジナルのコメントにコードを追加して、私のインデックスの作成方法を示してください。 – seiken

関連する問題