Linq to Lucene: «Предикат Lucene Term не может быть пустой строкой». - PullRequest
0 голосов
/ 02 мая 2009

Я пытаюсь внедрить Linq To Lucene в моем проекте, но при поиске чего-либо я всегда получаю результат Enumeration yielded no results, а когда отлаживаю и пытаюсь открыть свой [IndexContext].[TableProperty] в окне Watch Я получаю это сообщение:

Предикат Lucene Term не может быть пустой строкой.

Я пытался найти это в Google, но, по-видимому, он не дал результатов!

Кто-нибудь когда-нибудь сталкивался с этим сообщением раньше? И как я могу это исправить? потому что в настоящее время он не возвращает никаких данных

[Update]

Очевидно, проблема в том, что я использую один из методов расширения (Between, Match, Like и т. Д.), Которые находятся в Lucine.Linq.Extensions. Возьмите следующий пример:

var db = new MusicRepo_DB_IndexContext(@"C:\MusicRepoDB_index",
                                       new MusicRepo_DBDataContext());

Следующий запрос возвращает результат: db.Artists.Where(a => a.Name == "Camel");

Но это не так: db.Artists.Where(a => a.Search("Camel"));

[Update]

После дальнейшего тестирования я понял, что метод расширения Match действительно возвращает результат, тогда как другие (Search, Like) этого не делают. Я все еще борюсь с этой проблемой

1 Ответ

1 голос
/ 18 октября 2009

Я использую его и в своем проекте, и я считаю, что это сообщение показывает «Предикат Lucene Term не может быть пустой строкой», потому что Lucene не принимает пустой термин в качестве критерия поиска.

Вот что случилось со мной:

(база данных Northwind) Когда я пытался найти

var mmCustomers = from c in dbi.Get<Customer>()
                      where c.ContactTitle == "Marketing Manager"                       
                      select c;

работает нормально, но когда я пытаюсь:

var mmCustomers = from c in dbi.Get<Customer>()                       
                      select c;

показывает «Предикат Lucene Term не может быть пустой строкой». Ошибка.

Надеюсь, это поможет

...