2009-03-19 3 views
1

Вот что я хочу сделать, используя псевдо-код:поиска Lucene со сложным запросом

lucene.Find((someField == "bar" || someField == "baz") && anotherField == "foo"); 

Или на английском языке, «найти все документы, где SomeField является„бар“или„Баз“, и где anotherField is 'foo' ".

Как я могу сделать такой запрос с Lucene?

ответ

5

В синтаксисе запросов Lucene:

+(someField:bar someField:baz) +anotherField:foo 

Знак "+" означает, что этот термин необходим, так же, как синтаксис поиска Google. Термины круглых скобок действуют как один термин. Без «+» (или «-») термин необязателен; по крайней мере, одно из условий должно соответствовать, и чем больше терминов, которые соответствуют, тем выше оценка.

Передайте эту строку QueryParser, чтобы создать объект Query. Затем запрос может быть передан одному из нескольких методов поиска, в зависимости от ваших потребностей.

+0

Спасибо! Я попробую. Тем временем я буду отмечать это как правильный ответ. Я дам вам знать, работает ли это так, как ожидалось. –

+0

Кажется, отлично работает. Еще раз спасибо. –

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