Я использовал похожую технику при поиске для поиска в иерархии категорий. Я использую следующий метод для построения запроса, оставляя тяжелую работу классу QueryParser. Я обычно добавляю этот запрос в BooleanQuery.
QueryParser обычно отлично справляется, я часто использую его для построения большинства моих запросов Lucene - кажется, что он лучше, чем я, при создании определенного запроса в большинстве случаев !!
Еще одна вещь, которую вы можете сделать, это использовать QueryParser для его создания, затем установить точку останова и посмотреть, как был создан запрос, а затем обновить код с конкретным типом запроса.
private Query GetQuery(Sitecore.Data.ID id)
{
string categoryId = id.Guid.ToString(); //turn ID to string
StandardAnalyzer analyzer = new StandardAnalyzer(); //use standard analyzer
QueryParser parser = new QueryParser("categories", analyzer); //search inside category field
Query query = parser.Parse(categoryId); //get the query
return query;
}