В Lucene.Net, Как мне указать совпадение в любом из списка терминов для определенного поля? - PullRequest
1 голос
/ 17 августа 2011

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

Например, мне нужно, чтобы "AutoMake" был "Ford" или "Chevy". Так что, пока значение «AutoMake» является одним из этих двух, у нас все хорошо.

Вот как я формирую свой BooleanQuery, но я не думаю, что это правильно:

var query1 = new TermQuery(new Term("AutoMake", "Ford"));
var query2 = new TermQuery(new Term("AutoMake", "Chevy"));

var thisFilter = new BooleanQuery();
thisFilter.Add(query1, BooleanClause.Occur.MUST);
thisFilter.Add(query2, BooleanClause.Occur.MUST);

«ДОЛЖЕН» там эффективно «И» запрос, поэтому «AutoMake» должен быть и «Форд» и «Шевроле», что неправильно. (Я читал в BooleanClause «СЛЕДУЕТ», но я тоже не думаю, что это правильно.)

По сути, мне нужен оператор BooleanClause для "ИЛИ". Мне нужен способ инкапсуляции двух запросов, чтобы, если один из них был истинным, тогда весь запрос был верным? (Потому что у меня есть несколько таких запросов, поступающих в более крупный запрос в виде предложений.)

Вот что было бы замечательно.

var query = new AnyOfTheseTermsQuery();
query.Add(new Term("AutoMake", "Ford"));
query.Add(new Term("AutoMake", "Chevy"));

Это то, что я ищу. Это существует?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Я думаю, что «СЛЕДУЕТ» является правильным оператором для этого типа запроса. Вероятно, стоит потратить время на настройку небольшого индекса, чтобы проверить это, но когда я просматриваю документацию, похоже, это именно то, что вам нужно.

Удачи,

1 голос
/ 24 августа 2011

Да, добавьте эти 2 условия в BooleanQuery с предложением SHOULD.Это будет означать, что запрос будет искать любой из этих терминов.Затем добавьте этот запрос к родительскому BooleanQuery с предложением MUST, означающим, что подзапрос должен соответствовать документу.

...