2017-11-05 12 views
0

"& ="を使用して断片的/動的に構築する次のクエリがあります。 Elasticsearch 5.xおよびNest 5.x。 Visual StudioでElasticsearch NEST 5.x動的に構築されたクエリ

QueryContainer qfilter = null; 

qfilter = Query<ClassEL>.Term(m => m.OrderID, iOrderID); 

qfilter &= Query<ClassEL> 
.Range(r => r 
    .Field(f => f.Distance) 
    .GreaterThan(100)) 
&& 
.Query<ClassEL>.Term(t => t.Active, true); 

var searchDes = new SearchDescriptor<ClassEL>() 
.From(0) 
.Size(10) 
.Query(qfilter); <===== *** ERROR HERE *** 

、それが次のエラーメッセージのヒントを示しています

Error: Cannot convert from 'Nest.QueryContainer' to 'System.Func<Nest.QueryContainerDescriptor<ClassEL>, Nest.QueryContainer>' 

問題は、私は私が構築されたクエリを受け入れるたSearchDescriptorを得ることができないです。例のオンライン表示Search + Queryは、達成しようとしているものとは異なるものに転記されます。

var response = client.Search<Tweet>(s => s 
    .From(0) 
    .Size(10) 
    .Query(q => 
      q.Term(t => t.User, "kimchy") 
      || q.Match(mq => mq.Field(f => f.User).Query("nest")) 
     ) 
    ); 

EDIT

:アンドレイの答えを使用してだけで正常に動作します以下は、私が を避けたい一般的な例です。私は戻って検索クエリからの結果を取得しようとすると、問題は、しかし、起こる:

List<ClassViewEL> listDocuments = response.Documents.ToList(); 

Visual Studioは、すぐにエラーとしてそれを強調表示しますが、コンパイル時に問題を持っていません。

エラーCS0570: 'Nest.ISearchResponse.Documentsは' は A IGNORE言語

デバッグとに選択することによってサポートされていません。 boveエラーは正常に動作し、コードは問題なく実行されます。ただし、コンパイル時にエラーが発生すると、コードの展開が妨げられます。このエラーはどのように修正できますか?

解決方法:私のプロジェクト(Newtonsoft.Json.dll)の私の依存関係の1つは、エラーを発生させる古いバージョンをターゲットにしていました。ソリューションをクリーンアップして再構築すると、それが修正されます。

答えて

2

Func<SearchDescriptor<ClassEL>, ISearchRequest>を使用するか、別の方法で記述子を渡す必要があります。たとえば:

var queryContainer = Query<ClassEL>.Term(x => x.Field(f => f.FirstName).Value("FirstName")); 
queryContainer &= Query<ClassEL>.Term(x => x.Field(f => f.LastName).Value("LastName")); 

Func<SearchDescriptor<ClassEL>, ISearchRequest> searchFunc = searchDescriptor => searchDescriptor 
                         .Index("indexName") 
                         .Query(q => queryContainer); 

var response = _client.Search<ClassEL>(searchFunc); 

またはこの

ISearchRequest ExecuteQuery(SearchDescriptor<ClassEL> searchDescriptor, QueryContainer queryContainer) 
{ 
    return searchDescriptor.Index("indexName") 
     .Query(q => queryContainer); 
} 

public void GetResults() 
{ 
    var queryContainer = Query<ClassEL>.Term(x => x.Field(f => f.FirstName).Value("FirstName")); 
    queryContainer &= Query<ClassEL>.Term(x => x.Field(f => f.LastName).Value("LastName")); 

    var response = _client.Search<ClassEL>(s => ExecuteQuery(s, queryContainer)); 
} 
+0

ような質問の最後に私の編集を参照してください。あなたは同じバグに遭遇しましたか? – invulnarable27

+0

これはコンパイルに関する別の質問です。私はそのような問題はないが、ここで議論されている(https://stackoverflow.com/questions/5575076/c-sharp-error-is-not-supported-by-the-language-after-migration- to-net4)。助けてくれるかもしれない –

+0

それはまさに問題だった、正しい方向に向いてくれてありがとう – invulnarable27

関連する問題