Простой поиск NEST не возвращает результатов

Вот мой класс Cat:

public class Cat
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Вот моя основная программа, в которой я добавляю кота в индекс и выполняю простой поиск:

static void Main(string[] args)
{
    var node = new Uri("http://localhost:9200");
    var settings = new ConnectionSettings(node);
    settings.SetDefaultIndex("mdu-test");
    var client = new ElasticClient(settings);

    var cat = new Cat
    {
        Id = "1",
        Name = "Martijn",
    };
    var index = client.Index(cat);

    var searchResults = client.Search<Cat>(s => s
        .From(0)
        .Size(10)
        .Query(q => q
           .Term(p => p.Name, "Martijn")
        )
    );

    Cat firstCat = searchResults.Documents.ToList()[0];
}

Используя Curl, я вижу, что документ добавлен, но мой код ничего не возвращает. Самое смешное, что я уверен, что раньше работал с таким же кодом. Любая помощь с решением или отладкой будет принята с благодарностью. Заранее спасибо.


person Mister D.    schedule 30.05.2014    source источник


Ответы (1)


Вы используете запрос термина, который не анализируется - это означает, что он найдет только точные совпадения (с учетом регистра). Я предполагаю, что вы используете стандартный анализатор (по умолчанию) в вашем индексе, который заключает все ваши термины в нижний регистр.

Если вам нужны точные совпадения, установите Name в not_analyzed в вашем сопоставлении, в противном случае вы, вероятно, захотите использовать сопоставить запрос вместо этого, например:

var searchResults = client.Search<Cat>(s => s
    .From(0)
    .Size(10)
    .Query(q => q
        .Match(m => m
            .OnField(p => p.Name)
            .Query("Martijn"))
    )
);
person Greg Marzouka    schedule 31.05.2014
comment
Ага, вот и все. Спасибо! И отличное объяснение! - person Mister D.; 31.05.2014
comment
Ха, мне нравится, что меня здесь используют в качестве примера кошки, жутко, потому что я тоже большой любитель кошек :) - person Martijn Laarman; 31.05.2014