Причина, по которой вы получаете ноль хитов, заключается в том, что способы индексирования информации и способы запроса отличаются.
Когда вы индексируете свою информацию, вы используете StandardAnalyzer
, который внутренне использует LowerCaseFilter
, и все ваши данные располагаются в нижнем регистре внутри индекса.
Когда вы делаете запрос, вы создаете «необработанный» запрос (используя TermQuery
), который не ограничивает значение вашего термина. Если бы вы изменили строку
Term t = new Term("content", "Alan");
в
Term t = new Term("content", "alan");
Вы получите желаемый результат. Очевидно, что это плохой подход - вы хотите добиться того же самого путем анализа запроса и повторного использования одного и того же анализатора, например ::
Query q = MultiFieldQueryParser.parse(
Version.LUCENE_30,
"content:Alan",
new String[]{"content"},
new BooleanClause.Occur[] {BooleanClause.Occur.SHOULD},
analyzer
);
Возможно, вы можете использовать другой тип запроса, но у вас есть идея.
p.s. в следующий раз не включайте информацию, которая не имеет отношения к проблеме (материал PDF).