Поиск по нескольким полям в Lucene.NET - CodeHelper

Поиск по нескольким полям в Lucene.NET

2

Как искать по нескольким полям с помощью Lucene.NET? В большинстве примеров приводится поиск по одному полю:

var parser = new QueryParser("field", new StandardAnalyzer());
var query = parser.Parse("query");
var hits = indexSearcher.Search(query);

Новые ответы


0

На самом деле, конструктор класса 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 имеет ряд ограничений. Например, нельзя указать ряд настроек, предоставляемым стандартным парсером. И вообще поиск по нескольким полям считается плохим тоном. Гораздо чаще несколько полей реального документа переходят в одно поле индекса.


v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.