Фильтрация ElasticSearch и Nest не работает

Я запускаю запрос, который возвращает 10 результатов. В моем документе есть свойство Type. Значение этого свойства для некоторых записей — пустая строка, а для некоторых других записей — «AudioAlbum» или «AudioRington».

Я хочу сделать две вещи: 1- Исключить из результатов поиска документы, свойство Type которых не имеет значения. 2- Получить только AudioAlbums (как другой поиск).

Мой код поиска для получения AudioAlbums таков:

    var docs = client.Search<content>(
               b => b.Type("content")
               .Query(q => q.Fuzzy(fz => fz
               .OnField("title").Value(keyWord)
               .OnField("artists.name")))
               .Filter(x => x.Term("type", "AudioRingtone")))
               .Documents.ToList();

Без метода расширения Filter я получаю 10 записей (включая два AudioAlbums). когда я добавляю метод .Filter, я получаю нулевые записи.

Также я хочу исключить записи, свойство Type которых не имеет значения. Опять же, мой код (приведенный ниже) не записывает никаких результатов:

BaseFilter notFilter = Filter.Not(x => Filter.Term("Type", string.Empty));
var docs = client.Search<content>(
                b =>
                b.Type("content")
                .Query(q => q.Fuzzy(fz =>fz.OnField("title")
                .Value(keyWord)
                .OnField("artists.name")))
                .Filter(notFilter)).Documents.ToList();

Что не так с моим кодом?


person Aref    schedule 09.07.2013    source источник
comment
Привет, Араф. Я также ответил на этот вопрос в списке рассылки. Это решило проблему?   -  person Martijn Laarman    schedule 25.07.2013
comment
Да Мартин Большое спасибо   -  person Aref    schedule 26.07.2013


Ответы (1)


Скопировать вставленный ответ из списка пользователей elasticsearch

В вашем первом примере вы фильтруете поле «тип», а во втором — «тип», я полагаю, вам нужно изменить первое на «тип».

В зависимости от вашего анализа для поля «Тип», вам также может понадобиться использовать строчные буквы «AudioRingtone».

Во втором примере вы используете неправильный запрос:

http://www.elasticsearch.org/guide/reference/query-dsl/missing-filter/

Что в NEST вы можете сделать как таковое:

https://github.com/elasticsearch/elasticsearch-net/blob/master/src/Tests/Nest.Tests.Unit/Search/Filter/Singles/MissingFilterJson.cs

Если вы выдаете фильтр/запрос с пустым термином, вы попадаете в логику запроса без условий NEST, и гнездо даже не отправит фильтр вообще.

См. http://nest.azurewebsites.net/nest/writing-queries.html за помощью в использовании запроса dsl.

person Martijn Laarman    schedule 26.07.2013