2012-01-27 2 views
0

を減らして私は、しかし、私は今、フィールドのいずれかに照会する、マルチマップ/偉大な作業をされたインデックスを削減してい...しかし、フィールドは...子オブジェクト内にあるマルチマップ/インデックスフィールドの問題

ReduceResult 
- Name 
- Description 
- GenreObject 
    - Name 
    - Code 

私は、さまざまなオプションを試してみましたが、私はまだ下のエラーが表示されます。

Index(x => x.Genre.Code, FieldIndexing.Analyzed); 
Store(x => x.Genre.Code, FieldStorage.Yes); 

または 指数(X => x.Genre、FieldIndexing.Analyzed)。 ストア(x => x.Genre、FieldStorage.Yes);

「Genre_Code」が検索されているように見えるが、管理コンソールで「コード」のインデックスが付いていることがわかります。


Url: "/indexes/AudioWithCounters?query=Genre_Code%253Ahouse&start=0&pageSize=25&aggregation=None&sort=-WeeksComments" 

System.ArgumentException: The field 'Genre_Code' is not indexed, cannot query on fields that are not indexed 

私は「Genre_Code」手動で管理コンソール内にインデックス付きフィールド名を変更しようとしましたが、保存していないようです。

私はおそらく私がそれを取り除くことができる場合、私はおそらく私のジャンルのオブジェクトを浮気することができますが、むしろ私は知っている。

アイデア?

UPDATE - フルインデックス:

namespace HM.Web.Infrastructure.Indexes 
{ 
    public class AudioWithCounters : AbstractMultiMapIndexCreationTask<AudioWithCounters.AudioViewModel> 
    { 
     public class AudioViewModel 
     { 
      public string Id { get; set; } 
      public string ArtistName { get; set; } 
      public string Name { get; set; } 
      public string Identifier { get; set; } 
      public string Description { get; set; } 
      public IList<Tag> Tags { get; set; } 
      public Genre Genre { get; set; } 
      public DateTimeOffset? DateAdded { get; set; } 
      public UserImage Image { get; set; } 
      public int TotalComments { get; set; } 
      public int TotalDownloads { get; set; } 
      public int TotalPlays { get; set; } 
      public int TotalLikes { get; set; } 
      public int TotalFavourites { get; set; } 
      public int WeeksComments { get; set; } 
      public int WeeksDownloads { get; set; } 
      public int WeeksPlays { get; set; } 
      public int WeeksLikes { get; set; } 
      public int WeeksFavourites { get; set; } 
     } 

     public AudioWithCounters() 
     { 
      AddMap<Audio>(audios => from audio in audios 
            select new 
            { 
             Id = audio.Id, 
             ArtistName = audio.ArtistName, 
             Name = audio.Name, 
             Identifier = audio.Identifier, 
             Description = audio.Description, 
             Tags = audio.Tags, 
             Genre = audio.Genre, 
             DateAdded = audio.DateAdded, 
             Image = audio.Image, 
             TotalDownloads = 0, 
             TotalComments = audio.CommentsCount, 
             TotalPlays = 0, 
             TotalLikes = 0, 
             TotalFavourites = 0, 
             WeeksDownloads = 0, 
             WeeksPlays = 0, 
             WeeksComments = 0, 
             WeeksLikes = 0, 
             WeeksFavourites = 0 
            }); 

      AddMap<AudioComments>(comments => from audioComment in comments 
               from comment in audioComment.Comments 
               where comment.CreatedAt >= DateTimeOffset.Now.AddDays(-7) 
            select new 
            { 
             Id = audioComment.Audio.Id, 
             ArtistName = (string)null, 
             Name = (string)null, 
             Identifier = (string)null, 
             Description = (string)null, 
             Tags = (object)null, 
             Genre = (object)null, 
             DateAdded = (object)null, 
             Image = (object)null, 
             TotalDownloads = 0, 
             TotalComments = 0, 
             TotalPlays = 0, 
             TotalLikes = 0, 
             TotalFavourites = 0, 
             WeeksDownloads = 0, 
             WeeksPlays = 0, 
             WeeksComments = 1, 
             WeeksLikes = 0, 
             WeeksFavourites = 0 
            }); 


      AddMap<AudioCounter>(counters => from counter in counters 
              where counter.Type == Core.Enums.Audio.AudioCounterType.Download 
            select new 
            { 
             Id = counter.AudioId, 
             ArtistName = (string)null, 
             Name = (string)null, 
             Identifier = (string)null, 
             Description = (string)null, 
             Tags = (object)null, 
             Genre = (object)null, 
             DateAdded = (object)null, 
             Image = (object)null, 
             TotalDownloads = 1, 
             TotalComments = 0, 
             TotalPlays = 0, 
             TotalLikes = 0, 
             TotalFavourites = 0, 
             WeeksDownloads = 0, 
             WeeksPlays = 0, 
             WeeksComments = 0, 
             WeeksLikes = 0, 
             WeeksFavourites = 0 
            }); 

      AddMap<AudioCounter>(counters => from counter in counters 
              where counter.Type == Core.Enums.Audio.AudioCounterType.Play 
              select new 
              { 
               Id = counter.AudioId, 
               ArtistName = (string)null, 
               Name = (string)null, 
               Identifier = (string)null, 
               Description = (string)null, 
               Tags = (object)null, 
               Genre = (object)null, 
               DateAdded = (object)null, 
               Image = (object)null, 
               TotalDownloads = 0, 
               TotalPlays = 1, 
               TotalComments = 0, 
               TotalLikes = 0, 
               TotalFavourites = 0, 
               WeeksDownloads = 0, 
               WeeksPlays = 0, 
               WeeksComments = 0, 
               WeeksLikes = 0, 
               WeeksFavourites = 0 
              }); 

      AddMap<AudioCounter>(counters => from counter in counters 
              where counter.Type == Core.Enums.Audio.AudioCounterType.Download 
              where counter.DateTime >= DateTimeOffset.Now.AddDays(-7) 
              select new 
              { 
               Id = counter.AudioId, 
               ArtistName = (string)null, 
               Name = (string)null, 
               Identifier = (string)null, 
               Description = (string)null, 
               Tags = (object)null, 
               Genre = (object)null, 
               DateAdded = (object)null, 
               Image = (object)null, 
               TotalDownloads = 0, 
               TotalPlays = 0, 
               TotalComments = 0, 
               TotalLikes = 0, 
               TotalFavourites = 0, 
               WeeksDownloads = 1, 
               WeeksPlays = 0, 
               WeeksComments = 0, 
               WeeksLikes = 0, 
               WeeksFavourites = 0 
              }); 

      AddMap<Like>(likes => from like in likes 
              select new 
              { 
               Id = like.AudioId, 
               ArtistName = (string)null, 
               Name = (string)null, 
               Identifier = (string)null, 
               Description = (string)null, 
               Tags = (object)null, 
               Genre = (object)null, 
               DateAdded = (object)null, 
               Image = (object)null, 
               TotalDownloads = 0, 
               TotalPlays = 0, 
               TotalComments = 0, 
               TotalLikes = 1, 
               TotalFavourites = 0, 
               WeeksDownloads = 0, 
               WeeksPlays = 0, 
               WeeksComments = 0, 
               WeeksLikes = 0, 
               WeeksFavourites = 0 
              }); 

      AddMap<Favourite>(favs => from fav in favs 
            select new 
            { 
             Id = fav.AudioId, 
             ArtistName = (string)null, 
             Name = (string)null, 
             Identifier = (string)null, 
             Description = (string)null, 
             Tags = (object)null, 
             Genre = (object)null, 
             DateAdded = (object)null, 
             Image = (object)null, 
             TotalDownloads = 0, 
             TotalPlays = 0, 
             TotalComments = 0, 
             TotalLikes = 0, 
             TotalFavourites = 1, 
             WeeksDownloads = 0, 
             WeeksPlays = 0, 
             WeeksComments = 0, 
             WeeksLikes = 0, 
             WeeksFavourites = 0 
            }); 

      AddMap<AudioCounter>(counters => from counter in counters 
              where counter.Type == Core.Enums.Audio.AudioCounterType.Play 
              where counter.DateTime >= DateTimeOffset.Now.AddDays(-7) 
              select new 
              { 
               Id = counter.AudioId, 
               ArtistName = (string)null, 
               Name = (string)null, 
               Identifier = (string)null, 
               Description = (string)null, 
               Tags = (object)null, 
               Genre = (object)null, 
               DateAdded = (object)null, 
               Image = (object)null, 
               TotalDownloads = 0, 
               TotalPlays = 0, 
               TotalComments = 0, 
               TotalLikes = 0, 
               TotalFavourites = 0, 
               WeeksDownloads = 1, 
               WeeksPlays = 0, 
               WeeksComments = 0, 
               WeeksLikes = 0, 
               WeeksFavourites = 0 
              }); 

      AddMap<Like>(likes => from like in likes 
            where like.DateCreated >= DateTimeOffset.Now.AddDays(-7) 
            select new 
            { 
             Id = like.AudioId, 
             ArtistName = (string)null, 
             Name = (string)null, 
             Identifier = (string)null, 
             Description = (string)null, 
             Tags = (object)null, 
             Genre = (object)null, 
             DateAdded = (object)null, 
             Image = (object)null, 
             TotalDownloads = 0, 
             TotalPlays = 0, 
             TotalComments = 0, 
             TotalLikes = 0, 
             TotalFavourites = 0, 
             WeeksDownloads = 0, 
             WeeksPlays = 0, 
             WeeksComments = 0, 
             WeeksLikes = 1, 
             WeeksFavourites = 0 
            }); 

      AddMap<Favourite>(favs => from fav in favs 
             where fav.DateCreated >= DateTimeOffset.Now.AddDays(-7) 
             select new 
             { 
              Id = fav.AudioId, 
              ArtistName = (string)null, 
              Name = (string)null, 
              Identifier = (string)null, 
              Description = (string)null, 
              Tags = (object)null, 
              Genre = (object)null, 
              DateAdded = (object)null, 
              Image = (object)null, 
              TotalDownloads = 0, 
              TotalPlays = 0, 
              TotalComments = 0, 
              TotalLikes = 0, 
              TotalFavourites = 0, 
              WeeksDownloads = 0, 
              WeeksPlays = 0, 
              WeeksComments = 0, 
              WeeksLikes = 0, 
              WeeksFavourites = 1 
             }); 

      Reduce = results => from result in results 
           group result by result.Id 
            into g 
            select new 
            { 
             Id = g.Key, 
             ArtistName = g.Select(x => x.ArtistName).Where(x => x != null).FirstOrDefault(), 
             Name = g.Select(x => x.Name).Where(x => x != null).FirstOrDefault(), 
             Identifier = g.Select(x => x.Identifier).Where(x => x != null).FirstOrDefault(), 
             Description = g.Select(x => x.Description).Where(x => x != null).FirstOrDefault(), 
             Tags = g.Select(x => x.Tags).Where(x => x != null).FirstOrDefault(), 
             Genre = g.Select(x => x.Genre).Where(x => x != null).FirstOrDefault(), 
             DateAdded = g.Select(x => x.DateAdded).Where(x => x != null).FirstOrDefault(), 
             Image = g.Select(x => x.Image).Where(x => x != null).FirstOrDefault(), 
             TotalDownloads = g.Sum(x => x.TotalDownloads), 
             TotalPlays = g.Sum(x => x.TotalPlays), 
             TotalComments = g.Sum(x => x.TotalComments), 
             TotalLikes = g.Sum(x => x.TotalLikes), 
             TotalFavourites = g.Sum(x => x.TotalFavourites), 
             WeeksComments = g.Sum(x => x.WeeksComments), 
             WeeksDownloads = g.Sum(x => x.WeeksDownloads), 
             WeeksPlays = g.Sum(x => x.WeeksPlays), 
             WeeksLikes = g.Sum(x => x.WeeksLikes), 
             WeeksFavourites = g.Sum(x => x.WeeksFavourites) 
            }; 

      Index(x => x.Genre.Code, FieldIndexing.Analyzed); 
      Store(x => x.Genre.Code, FieldStorage.Yes); 
     } 
    } 

} 
+0

質問を更新して、使用しているインデックスが含まれているので、問題の内容を特定することが難しくなりません。 –

+0

は完全なインデックスコード –

+0

Ermで更新されました。これは本当に複雑なインデックスのようです。また、同じ種類の複数のAddMap句もあります。これは、RavenDBメーリングリストでよりよく議論されるかもしれません。あなたのドキュメントの説明とあなたが何をしようとしているのかを投稿できますか? –

答えて

1

Genre.Codeフィールドがインデックスではありませんので、あなたが見ている問題があります。 Map/Reduceインデックスの出力は、Genre.Codeフィールドを含まないReduceステートメントです。

Reduce = results => from result in results 
           group result by result.Id 
            into g 
            select new 
            { 
             Id = g.Key, 
             ArtistName = g.Select(x => x.ArtistName).Where(x => x != null).FirstOrDefault(), 
             Name = g.Select(x => x.Name).Where(x => x != null).FirstOrDefault(), 
             Identifier = g.Select(x => x.Identifier).Where(x => x != null).FirstOrDefault(), 
             Description = g.Select(x => x.Description).Where(x => x != null).FirstOrDefault(), 
             Tags = g.Select(x => x.Tags).Where(x => x != null).FirstOrDefault(), 
             Genre = g.Select(x => x.Genre).Where(x => x != null).FirstOrDefault(), 
             DateAdded = g.Select(x => x.DateAdded).Where(x => x != null).FirstOrDefault(), 
             Image = g.Select(x => x.Image).Where(x => x != null).FirstOrDefault(), 
             TotalDownloads = g.Sum(x => x.TotalDownloads), 
             TotalPlays = g.Sum(x => x.TotalPlays), 
             TotalComments = g.Sum(x => x.TotalComments), 
             TotalLikes = g.Sum(x => x.TotalLikes), 
             TotalFavourites = g.Sum(x => x.TotalFavourites), 
             WeeksComments = g.Sum(x => x.WeeksComments), 
             WeeksDownloads = g.Sum(x => x.WeeksDownloads), 
             WeeksPlays = g.Sum(x => x.WeeksPlays), 
             WeeksLikes = g.Sum(x => x.WeeksLikes), 
             WeeksFavourites = g.Sum(x => x.WeeksFavourites) 
            }; 

フィールドをStoredに設定するだけでは解決できません。

しかし、大きな質問は、このようなインデックスを作成している理由です。上記のコメントを参照してください。

関連する問題