Estruturação adequada do uso do Lucene.Net em um site ASP.NET MVC
Estou construindo um site ASP.NET MVC onde pretendo usar o Lucene.Net. Eu imaginei uma maneira de estruturar o uso do Lucene, mas não tenho certeza se minha arquitetura planejada está correta e eficiente.
Meu plano:EmApplication_Start
evento no Global.asax: verifico a existência do índice no sistema de arquivos - se ele não existir, crio-o e preencho-o com os documentos extraídos do banco de dados.Quando um novo conteúdo é enviado: eu crio umIndexWriter
, preencha um documento, escreva no índice e, finalmente, descarte oIndexWriter
. IndexWriters
não são reutilizados, pois não consigo imaginar uma boa maneira de fazer isso em um aplicativo ASP.NET MVC.Quando o conteúdo é editado: repito o mesmo processo que o novo conteúdo é enviado, exceto que primeiro apago o conteúdo antigo e adiciono as edições.Quando um usuário procura por conteúdo: eu verificoHttpRuntime.Cache
para ver se um usuário já pesquisou esse termo nos últimos 5 minutos - se tiver, retornarei esses resultados; caso contrário, eu crio umIndexReader
, crie e execute uma consulta, coloque os resultados emHttpRuntime.Cache
, devolva-os ao usuário e, finalmente, descarte oIndexReader
. De novo,IndexReaders
não são reutilizados.Minhas perguntas:Essa é uma boa estrutura -como posso melhorar isso?Existemquaisquer problemas de desempenho / eficiência Eu deveria estar ciente?Também énão reutilizando os IndexReaders e IndexWriters um enorme cheiro de código?