Pergunta

Quando eu estava usando o Lucene para indexar minhas entidades, tinha o hábito de colocar todas as minhas propriedades indexadas em um campo chamado "All", para realizar uma pesquisa em "All" dos meus tipos de entidades.

Agora, usando o Nibernate.search, não consigo encontrar como fazer isso. Eu tentei o seguinte:

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

Mas tenho uma exceção lançada: "Chave já presente no dicionário", na linha 26 de ScopeDanalyzer.cs:

scopedAnalyzers.Add(scope, analyzer);

Onde "Scope" é o nome do campo Index (aqui, "All"). Se eu fizer um cheque como

if( !scopedAnalyzers.ContainsKey( scope ) )

Funcionará muito bem: terei 2 campos para cada documento "post", um com o corpo, um com o nome. No entanto, não estou em fácil modificar o código -fonte do Nibernate.search.

Alguém tem uma sugestão sobre como indexar propriedades diferentes em um campo?

Foi útil?

Solução

Se você estiver tendo problemas para usar os atributos de campo para especificar o que você precisa, pode criar uma ponte de classe que permitirá criar seu próprio documento.

Basta usar o ClassBridGeattribute na definição da classe e especificar um tipo que implementa a interface ifieldbridge. Isso permitirá que você tenha controle completo sobre como os documentos do Lucene são construídos.

Mais informações podem ser encontradas em http://docs.jboss.org/hibernate/stable/search/reference/en/html/search-mapping-bridge.html Veja o 4.2.2.3. Seção de Classbridge

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top