Lucene.net com IndexSearcher / IndexWriter em uma aplicação Web
-
05-07-2019 - |
Pergunta
Atualmente estou correndo Lucene.net em uma aplicação web e estou querendo saber sobre o melhor método, em termos de performance.
Actualmente tenho que configurar para que todas as gravações de índice são processadas juntos em um processo agendado, juntamente com a otimização do índice.
No entanto, para a pesquisa -. Atualmente estou abrindo e fechando o pesquisador por pesquisa, que eu sei que não é o ideal
O que você acha que seria a melhor abordagem nesta situação?
Vou precisar para fechar e reabrir o pesquisador índice uma vez que a atualização / otimização é processado assim que o processo programado (que é um console aplicativo Windows) precisa comunicar que terminou com a aplicação web.
Solução
Eu só integrado Lucene.NET em BugTracker.NET. Eu não tenho certeza de que o que eu fiz é a melhor, mas parece estar funcionando bem.
Eu criar o índice na inicialização do aplicativo.
Eu criar um buscador e mantê-lo em torno de modo que o índice não é recarregado com cada pesquisa. Todos os segmentos compartilham o mesmo pesquisador. Quando as pesquisas pesquisador, ele agarra um bloqueio.
Enquanto isso, eu tenho uma IndexWriter que atualiza o índice quando há uma mudança de dados. Ele é apenas mudar um pouco para que ele faz a sua rápida tarefa. Quando ele é executado, ele agarra o mesmo bloqueio, destrói o pesquisador, atualiza o índice, ea re-recria o pesquisador. As novas estadias pesquisador ao redor até a próxima atualização do índice. O pesquisador sempre está trabalhando com um índice up-to-date.
Você pode obter a fonte BugTracker.NET e olhar para o my_lucene.cs arquivos e search_text.aspx. É tudo nesses dois arquivos, e não há muito código.
Outras dicas
Você poderia chamar para o método leitores IsCurrent () para verificar se há uma nova versão do índice disponível, e se é, em seguida, reabri-lo. não poderia ser a melhor maneira, mas é fácil o suficiente e se suas exigências não são muito grandes, será suficiente.