Frage

Als ich Lucene wurde mit meinen Einheiten zu indizieren, hatte ich die Gewohnheit, dass alle meine indizierte Eigenschaften in einem Feld mit dem Namen „all“, eine Suche auf „alle“ meinem Einheiten-Typen auszuführen.

Nun kann mit NHibernate.Search, kann ich nicht finden, wie dies zu tun. Ich versuchte dies:

[Indexed(Index = "MyIndex")]
public class Post
{
    [DocumentId]
    public virtual int Id { get; set; }
    [IndexedEmbedded]
    public virtual Author Author { get; set; }
    [IndexedEmbedded]
    public virtual IEnumerable<Category> Categories { get; set; }
    [Field(Index.Tokenized, Store = Store.Yes)]
    [Field(Name = "All", Index = Index.Tokenized, Store = Store.Yes)]
    public virtual string Name { get; set; }
    [Field(Name = "All", Index = Index.Tokenized, Store = Store.Yes)]
    [Field(Index.Tokenized, Store = Store.Yes)]
    public virtual string Body { get; set; }
}

Aber ich habe eine Ausnahme geworfen: "Schlüssel bereits im Wörterbuch", in ScopedAnalyzer.cs Zeile 26:

scopedAnalyzers.Add(scope, analyzer);

Wo „scope“ ist der Name des Indexfeldes (hier „All“). Wenn ich einen Scheck setzen wie

if( !scopedAnalyzers.ContainsKey( scope ) )

wird es ganz gut funktionieren: Ich habe 2 Felder für jedes „Post“ Dokument, eine mit dem Körper, eine mit dem Namen. Allerdings bin ich mir nicht leicht modifizierende NHibernate.Search Quellcode.

bekam jemand einen Vorschlag, wie man Index unterschiedliche Eigenschaften in einem Feld?

War es hilfreich?

Lösung

Wenn Sie Probleme bei der Verwendung der Feldattribute angeben, was Sie benötigen Sie eine Klasse Brücke erstellen können, die Ihnen erlaubt, Ihr eigenes Dokument zu erstellen.

benutzen Sie einfach den ClassBridgeAttribute auf der Klassendefinition und geben Sie eine Art, dass Geräte der IFieldBridge Schnittstelle. Dies ermöglicht Ihnen die vollständige Kontrolle darüber zu haben, wie die Lucene Dokumente gebaut werden.

Weitere Informationen finden Sie unter http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-mapping-bridge.html siehe 4.2.2.3. ClassBridge Abschnitt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top