У меня есть один индекс для продуктов и один индекс для цен.
Предположим, что в документах индекса товаров есть: Id, Name, CategoryId
полей, а в индексе цен: Id, ProductId, Amount
полей.
Товар может иметь несколько цен. Мне нужно получить продукт со всеми его ценами при поиске в Lucene
Я ищу продукты по CategoryId. Запрос ниже возвращает все цены, но мне также нужен продукт.
var fromField = "Id";
var toField = "ProductId";
var categoryId = 2462;
var fromQuery = new BooleanQuery();
fromQuery.Add(NumericRangeQuery.NewInt32Range("CategoryId", categoryId, categoryId, true, true), Occur.MUST);
var joinQuery = JoinUtil.CreateJoinQuery(fromField, false, toField, fromQuery, _indexProductSearcher, ScoreMode.None);
var topDocs = _indexPriceSearcher.Search(joinQuery, 1800);
foreach (var scoreDoc in topDocs.ScoreDocs)
{
var foundPrice = _indexPriceSearcher.Doc(scoreDoc.Doc);
}
Я мог бы искать цены, получать все результаты, а для каждого продукта искать цены и строить ответ. Но мне было интересно, есть ли что-то встроенное для этого.