Самой зрелой платформой с открытым исходным кодом для решения вашей проблемы, безусловно, является Lucene. Если вы хотите использовать Lucene в его собственной форме или использовать слой абстракции, такой как Solr, как упомянул @steen, решать вам. Но основная идея проста.
1- Подготовьте исходный документ для индексирования. Вы можете использовать Tika или любой другой нативный парсер XML, все будет в порядке.
(Когда я имел в виду подготовку, вам нужно разделить документ по отдельным полям).
2 - Насколько я понимаю, вам не нужен какой-либо специальный анализатор, вы можете просто использовать стандартный анализатор (который поставляется в комплекте с люценом). Просто убедитесь, что вы используете опцию «Analyzer_With_Norms» при индексации.
3 - причина, по которой вам нужен параметр норм, как упомянуто в предыдущем пункте, заключается в том, что теперь вы можете указать свой вес для каждого поля при индексации.
Для тех, кто не знаком с Lucene, все это может показаться очень запутанным. Я предлагаю книгу Lucene In Action для лучшего понимания Lucene.