2013-08-15 2 views
3

Я делаю первые шаги с использованием ElasticSearch и библиотеки NEST C# для .NET. Вот мой код:Получение пустых результатов с использованием NEST для ElasticSearch

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Nest; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     var setting = new ConnectionSettings(new Uri("http://localhost:9200/")); 
     setting.SetDefaultIndex("Post"); 
     var client = new ElasticClient(setting); 

     var post = new Post(); 
     post.id = 1; 
     post.title = "the title"; 

     var t = client.Index(post); 

     var results = client.Search<Post>(s => s.From(0) 
      .Size(10) 
      .Fields(f => f.id, f => f.title) 
      .Query(q => q.Term(f => f.title, "title", Boost: 2.0)) 
      ); 

    } 
} 
public class Post 
{ 
    public int id { get; set; } 
    public string title { get; set; } 
} 

я ожидал, чтобы получить результат от 1 сообщения, потому что он имеет «название» ключевое слово в нем, но я получаю пустой результирующий набор. Что я делаю неправильно?

+0

Уже ответил: http://stackoverflow.com/questions/15887276/elasticsearch-nest-client-not-returning-results –

ответ

3

Вопрос используется term. Это будет соответствовать только точный текст, индексированный. Запрос term: useful for id type searching.

Если вы делаете бесплатный поиск текста, попробуйте использовать запрос match для хорошего поиска текста. You can read more about it here on the official docs и, надеюсь, начнет открывать, как создавать интересные и мощные запросы, знакомясь с документами.

Успехов

0

Требуется очень мало времени для индексации вашего сообщения. Если вы вставляете Thread.Sleep (1000); между вашей индексацией и вашим запросом вы получите результаты.

+0

Нету. показывает пустые результаты. даже используется 10 секунд: [ –

+0

Хотя это хорошее место (и я определенно был смущен этим в какой-то момент), я думаю, что это может быть тип запроса, который он использует. – ramseykhalaf

+0

Если вам нужно получить результаты сразу после 'Index()' use 'Get()', который является в реальном времени, или если вам нужно вернуть его из 'Search()' call Index(), передающего 'new IndexParameters {Refresh = true} ', но в конечном итоге вы получаете больше от разработки приложения, чтобы справиться с реализацией elasticsearch в режиме реального времени. Никогда не полагайтесь на Thread.Sleep по множеству причин. –

Смежные вопросы