Sim,
O core do NH Search são listeners que interceptam os comandos de persistência (INSERT, UPDATE, DELETE) e de acordo com os decorators que devem estar contidos no seu modelo, grava as informações nos indexes via Lucene. O NH Search também implementa um recurso onde você pode faz a pesquisa. Esta pesquisa retorna para os ID´s das entidades em que a pesquisa ao index encontrou relevância e assim ao fazer a consulta no banco das entidades ele faz a SELECT indicando diretamente o campo identity que é um index clusterizado no banco de dados (no caso de SQL Server), portanto, a consulta fica muito (mas muito mesmo) rápida.
Resumindo:
Você faz uma pesquisa (imagine um blog onde você quer pesquisar a entidade Post). Você quer pesquisar posts que tenham no conteúdo do post a palavra "nhibernate" (para o Lucene, um índice não-tokenizado) e que o autor tenha no nome a palavra "borges" (pesquisando um índice tokenizado):
search.CreateFullTextQuery<Post>("nhibernate Autor.Nome:borges").List<Post>()
Isso retornaria, por exemplo, que as entidades Post com o campo id igual a 10, 15, 31 e 46 são relevantes para a pesquisa. Logo, o NHibernate irá fazer a seginte consulta SQL retornando as entidades:
SELECT * FROM Posts WHERE PostId IN (10,15,31,46) <- Isso é muito rápido
Entendeu?
Se você tem uma base pronta e implementar o NH Search, você terá que "atualizar" o índice de alguma forma, por exemplo, fazendo um processo varrendo todas as entidades e fazendo um update qualquer em todas as entidades apenas para os interceptors receberem as entidades e atualizarem o índice (deve existir uma forma amis elegante de fazer isso mas eu não conheço, ainda...).
O NH Search é "plugado" ao Lucene.Net, no lucene você vai configurar ele para que ele entenda que o conteúdo indexado está em português. Isso é importante para que ele, ao indexar o conteúdo, ele irá "quebrar" as palavras antes de indexar. Com "quebrar", quero dizer que ele irá pegar as palavras que terminam com "S" (plural) e irá remover o "S", palavras que terminam com "ão" também são indexadas sem este sulfixo, o Lucene irá "limpar" as palavras para que a pesquisa seja mais precisa. O Lucente também remove "stop-words", palavras com "a", "o", "para", "em". Na hora de fazer a pesquisa ele também limpa o texto que você está tentando pesquisar.
Um conteúdo bastante exclarecedor sobre NHibernate Search:
Lembrando que o Lucene (do Java) é utilizada até hoje em grandes projetos, fazendo parte inclusive do core desses projetos. Exemplos:
Apache Solr
Elasticsearch
Abraço,
Juliano Oliveira