Запрос Lucene - “Соответствует точно одному из x, y, z”

Я не полагаю, что это принадлежит контроллера, потому что, после того как это встраивается там, это не может выйти.

я думаю, что MVC должен иметь введенный промежуток другого слоя: уровень служб, который отображается на варианты использования. Это содержит бизнес-логику, знает о единицах работы и транзакциях, и имеет дело с моделью, и персистентность возражает для выполнения ее задач.

контроллер имеет ссылку на сервис, что это должно выполнить свой вариант использования. Это волнуется о немаршалинге запросов в объекты, с которыми сервис может иметь дело, называет сервис и упорядочивает ответ для передачи обратно представлению.

С этим расположением, сервис применим самостоятельно даже без пары контроллера/представления. Это может быть локальным или удаленным объектом, упакованным, и развернуло любой способ, которым Вы желаете, что контроллер имеет дело с.

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

я думаю, что этот дизайн более для обслуживания широкого круга запросов.

5
задан T.Rob 28 November 2011 в 03:14
поделиться

3 ответа

Для справки, если кто-то еще столкнется с этой проблемой, вот мое решение:

IList<string> ALL_TYPES = new[] { "article", "blog", "forum" };
string q = ...; // The user's search string
IList<string> includeTypes = ...; // List of types to include
Query searchQuery = parser.Parse(q);
Query parentQuery = new BooleanQuery();
parentQuery.Add(searchQuery, BooleanClause.Occur.SHOULD);
// Invert the logic, exclude the other types
foreach (var type in ALL_TYPES.Except(includeTypes))
{
    query.Add(
        new TermQuery(new Term("type", type)),
        BooleanClause.Occur.MUST_NOT
    );
}
searchQuery = parentQuery;

Я инвертировал логику (т.е. исключил типы, которые пользователь не выбрал), потому что, если вы не • порядок результатов теряется. Я не уверен, почему ...! Обидно, потому что это делает код менее понятным / поддерживаемым, но, по крайней мере, он работает!

4
ответ дан 14 December 2019 в 08:55
поделиться

Добавьте ограничения для отклонения документов, которые не были выбраны. Например, если была проверена только «статья», ограничение было бы

-(type:forum type:blog)
3
ответ дан 14 December 2019 в 08:55
поделиться

Хотя предложение Эриксона кажется правильным, вы можете использовать положительное ограничение AND с вашим термином поиска, например text: foo AND type: article только для случая «article» был проверен, или text: foo AND (type: article OR type: forum) для случая, когда были проверены и «article», и «forum».

0
ответ дан 14 December 2019 в 08:55
поделиться