2015-02-19 4 views
1

Я пытаюсь проверить создание индекса, добавить документ и найти его с фильтром. Я получаю ошибку компилятора, которую я не могу решить. Спасибо за вашу помощь!Elasticsearch nest C# ошибка компилятора

Ошибка компилятора (VS 2013, консоли App):

"Выражение дерево не может содержать динамическую операцию."

Когда я дважды кликаю по ошибке, он выделяет «t.User» в строке .Filter кода.

Вот полный код.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.CompilerServices; 
using System.Runtime.Remoting.Metadata.W3cXsd2001; 
using System.Text; 
using System.Threading.Tasks; 
using Nest; 

namespace elastic_search_client_app 
{ 
    class Post 
    { 
     public int Id; 

     public string User; 

     public DateTime PostDate; 

     public String Message; 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var uri = new Uri("http://es-server-name"); 

      var settings = new ConnectionSettings(uri).SetDefaultIndex("stack-overflow-posts"); 

      var client = new ElasticClient(settings); 

      var post = new Post() { Id = 2, User = "[email protected]", PostDate = DateTime.Now, Message = "This is pretty cool and lot of text stuff here from catalog summary collection" }; 

      client.Index(post); 

      client.Refresh(); 

      var result = client.Search<dynamic>(s => s 
       .Index("stack-overflow-posts") 
       .AllTypes() 
       .Query(q => 
        q.QueryString(qs => 
         qs.Query("cool"))) 
       .Filter(f => f.Term(t => t.User, "[email protected]"))); 
     } 
    } 
} 

ответ

1
An expression tree may not contain a dynamic operation. 

ошибка довольно прямо вперед.

Скомпилированное выражение запроса фильтра t => t.User, "[email protected]" имеет подпись Expression<Func<T, object>> fieldDescriptor, object term).

Компилятор не может вывести T, так как T имеет тип dynamic.

Вы можете либо изменить тип запроса на client.Search<Post>, либо использовать перегрузку string.

var result = client.Search<dynamic>(s => s 
    .Index("stack-overflow-posts") 
    .AllTypes() 
    .Query(q => 
     q.QueryString(qs => 
      qs.Query("cool"))) 
    .Filter(f => f.Term("user", "[email protected]"))); 
0

Спасибо! Но у меня пока нет работы.

Я изменил код к следующему, и она работает:

var result = client.Search<Post>(s => s 
           .Index("stack-overflow-posts") 
           .AllTypes() 
           .Query(q => 
            q.QueryString(qs => 
             qs.Query("cool"))) 
           .Filter(f => f.Term(t => t.Id, 2))); 

Но ниже код не дает и 0 результатов. Что случилось с моим кодом?

var result = client.Search<Post>(s => s 
         .Index("stack-overflow-posts") 
         .AllTypes() 
         .Query(q => 
          q.QueryString(qs => 
              qs.Query("cool"))) 
         .Filter(f => f.Term(t => t.User, "[email protected]"))); 
Смежные вопросы