Как искать по нескольким полям с помощью Lucene.NET? В большинстве примеров приводится поиск по одному полю:
var parser = new QueryParser("field", new StandardAnalyzer());
var query = parser.Parse("query");
var hits = indexSearcher.Search(query);
Как искать по нескольким полям с помощью Lucene.NET? В большинстве примеров приводится поиск по одному полю:
var parser = new QueryParser("field", new StandardAnalyzer());
var query = parser.Parse("query");
var hits = indexSearcher.Search(query);
На самом деле, конструктор класса QueryParser
в качестве первого параметра принимает поле по умолчанию. То есть если в запросе будет явно указано другое поле (например так: "title: search this text"), то поиск будет производиться именно по указанному полю.
Для поиска по нескольким полям одновременно можно использовать MultiFieldQueryParser
. Объект этого класса парсит запрос как стандартный QueryParser
для каждого из определенных полей и группирует полученные объекты Query
в один объект BooleanQuery
:
Query query = new MultiFieldQueryParser().parse("this is query",
new String[] {"field1", "field2"},
new SimpleAnalyzer());
IndexSearcher searcher = new IndexSearcher(directory);
Hits hits = searcher.search(query);
Стоит помнить, что объект MultiFieldQueryParser имеет ряд ограничений. Например, нельзя указать ряд настроек, предоставляемым стандартным парсером. И вообще поиск по нескольким полям считается плохим тоном. Гораздо чаще несколько полей реального документа переходят в одно поле индекса.