Pregunta

Cuando yo estaba usando Lucene para indexar mis entidades, que tenía la costumbre de poner todas mis propiedades indexadas en un campo denominado "todos", para llevar a cabo una búsqueda en "todos" de mis tipos de entidades.

Ahora, usando NHibernate.Search, no puedo encontrar la manera de hacer esto. He intentado esto:

[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; }
}

Pero tengo una excepción lanzada: "clave ya presente en el diccionario", en la línea 26 ScopedAnalyzer.cs:

scopedAnalyzers.Add(scope, analyzer);

Donde "alcance" es el nombre del campo de índice (en este caso, "All"). Si pongo un cheque como

if( !scopedAnalyzers.ContainsKey( scope ) )

que funcionará bastante bien: voy a tener 2 campos para cada documento "Post", una con el cuerpo, una con el nombre. Sin embargo, no estoy en fácil modificar el código fuente NHibernate.Search.

¿Alguien tiene alguna sugerencia sobre cómo indexar propiedades diferentes en un campo?

¿Fue útil?

Solución

Si tiene algún problema usando los atributos de campo para especificar lo que necesita, puede crear un puente de clase que le permitirá crear su propio documento.

sólo tiene que utilizar el ClassBridgeAttribute en la definición de clase y especificar un tipo que implementa la interfaz IFieldBridge. Esto le permitirá tener un control completo sobre cómo los documentos de Lucene se construyen.

más información se puede encontrar en http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-mapping-bridge.html ver el 4.2.2.3. sección ClassBridge

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top