2015-12-01 18 views
6

Üzerinde bir koleksiyon ile bir varlık var ve onu dizine eklemek istiyorum, ancak bu konuda nasıl gidileceğini bulmakta zorlanıyorum. Sorun şu ki, Lucene'u kullanarak dinamik bir indeksle aynı şekilde arama yapmayı umuyorum. Gerçi karmaşık bir nesne değil. Basit bir örnek;RavenDB - doğru koleksiyon için bir dizin ayarlama LuceneQuery

{ 
    Id: "object/id", 
    Items: [ 
     { Id: "1", Name: "One"  }, 
     { Id: "2", Name: "Two"  }, 
     { Id: "3", Name: "Three" } 
    ] 
} 

Ve Lucene ile endeksi kolayca kuzgun dinamik endekste inşa sorgulayabilir;

Öğeler, Adı: "Bir"

Bu yapmam gereken bazı şeyler için temiz ve verimli ve mükemmel görünüyor, ama kendi Endeksinde davranışı yeniden çalışıyorum ve başaramıyorum oldukça kötü. Bunu alana indekslemeyi söylüyorum, ama yine de buna aramama izin vermeyi reddediyor;

public class Things_ByItemProperties : AbstractIndexCreationTask<Thing> 
{ 
    public Things_ByItemProperties() 
    { 
     Map = things => from thing in things 
        select new 
        { 
         Id = thing.Id, 
         Items = thing.Items 
        }; 

     Index(n => n.Items, FieldIndexing.Analyzed); 
    } 
} 

Koleksiyonun belirli bir bölümünü dizine ekleyebildiğimi biliyorum;

public class Things_ByItemProperties : AbstractIndexCreationTask<Thing> 
{ 
    public Things_ByItemProperties() 
    { 
     Map = things => from thing in things 
        select new 
        { 
         Id = thing.Id, 
         Items = thing.Items, 
         Items_Name = this.Select(r => r.Name) 
        }; 

     Index(n => n.Items, FieldIndexing.Analyzed); 
    } 
} 

ama bu benim yapmaya çalıştığım şey bu değil, ben çok dinamik bir dizin gibidir Lucene ile sorgulamak için bunu ayarlamak çalışıyordum. Bunun yapılmasının hiçbir yolu yok mu?

cevap

1

Evet, bu yapılabilir. Ancak önemsiz değil. documentation'a bir göz atmanızı öneriyorum. Şu an telefondayım ama eğer onunla bazı problemleriniz varsa, size yarın bir örnek verebilirim. Bu arada bu SO answer'a bir göz atabilirsiniz.

+0

Bir sorun üzerinde sıkışıp kaldım ve bunu bitirmem gerektiğini unuttum. Şimdi sana kredi verirsem, ödül puanlarını hala alabilecek misin? Yoksa tekrar açabilmek için tekrar puan vermem gerekiyor mu? – Ciel

+0

Sorun değil. Sanırım ödül kazanamayacağım ama sorun değil. Eğer bu yardımcı olsaydı, bunu cevap olarak işaretlediniz. İlk etapta yapmak istediğin şeyi yapabildin mi? –

+0

Tamam ... Sonunda buna geri dönüyorum. Hayır, "o kişi" olmayacağım. Tekrar bir ödül yaparsam ve sonra cevabını verirsem, işe yarayacak mı? – Ciel