Я пробовал много разных стратегий для индексации моих данных, но, похоже, не могу понять это сам.Индексирование пожеланий и торговых списков в RavenDB
Я строю базу данных по пользователям и их играм. Пользователи могут поставить базу данных игр, которыми они владеют, и хотели бы торговать, а также список игр, они хотели бы иметь:
public class Member : EntityBase
{
public List<Game> TradeList { get; set; }
public List<Game> WishList { get; set; }
}
Я пытаюсь создать и индекс можно запросить в форме «Дайте мне список всех игр (с соответствующими членами), которые имеют игры в своем TradeList, соответствующие моему WishList, а также игры в WishList, соответствующие моему TradeList» .. и, конечно, я сам исключен.
Я попытался создать MultiMapIndex:
public class TradingIndex : AbstractMultiMapIndexCreationTask<TradingIndex.Result>
{
public enum ListType
{
Wishlist,
Tradelist
}
public class Result
{
public string Game { get; set; }
public string Member { get; set; }
public ListType List { get; set; }
}
public TradingIndex()
{
AddMap<Member>(members => from member in members
from game in member.TradeList
select new Result()
{
Game = game.Id,
Member = member.Id,
List = ListType.Tradelist
});
AddMap<Member>(members => from member in members
from game in member.WishList
select new Result()
{
Game = game.Id,
Member = member.Id,
List = ListType.Wishlist
});
}
}
А потом запрашивая его так:
db.Query<TradingIndex.Result, TradingIndex>()
.Where(g =>
(g.Game.In(gamesIWant) && g.List == TradingIndex.ListType.Tradelist)
&&
(g.Game.In(gamesITrade) && g.List == TradingIndex.ListType.Wishlist)
&&
g.Member != me.Id
)
Но я не могу получить, чтобы работать. Я также посмотрел на Map/Reduce, но проблема, с которой я, похоже, получаю RavenDB, чтобы дать мне правильный тип результата.
Надеюсь, вы получите то, что я пытаюсь сделать, и могу дать мне несколько советов о том, что посмотреть.
По какой-то причине ваш код не работал с моими данными. Однако после сброса всех данных и индексов и их воссоздания он действительно работал. Странный. Разве RavenDB не должен перестраивать индекс при обнаружении изменений? – hakksor
Возможно, вы могли бы просто * сбросить * индекс, вместо того, чтобы сбросить все ваши данные. Но я рассмотрю это дальше. Интересно, рассматривает ли Raven изменения в настройках «FieldStorage» при определении необходимости восстановления индекса. –
Проделайте пару тестов, и кажется, что изменения в хранилище полей восстанавливают индекс. См. [Этот GIST] (https://gist.github.com/mj1856/7311049). Возможно, индекс был только что восстановлен, когда вы проверили первый раз? –