Я надеюсь, что кто-то, обладающий достаточным пониманием внутренней работы Lucene, сможет указать мне правильное направление =)
Я пропущу большую часть окружающего неуместного кода и перейду прямо к погоне. У меня есть индекс Lucene, к которому я добавляю следующее поле в индекс (переменные заменяются их литеральными значениями):
document.Add( new Field("Typenummer", "E5CEB501A244410EB1FFC4761F79E7B7",
Field.Store.YES , Field.Index.UN_TOKENIZED));
Позже, когда я ищу свой индекс (используя другие типы запросов), я могу убедиться, что это поле действительно появляется в моем индексе - как при циклическом просмотре всех полей, возвращаемых Document.GetFields ()
Field: Typenummer, Value: E5CEB501A244410EB1FFC4761F79E7B7
Пока все хорошо: -)
Теперь настоящая проблема заключается в том, почему я не могу использовать TermQuery для поиска по этому значению и фактически получить результат.
Этот код производит 0 хитов:
// Returns 0 hits
bq.Add( new TermQuery( new Term( "Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7" ) ), BooleanClause.Occur.MUST );
Но если я переключу это на WildcardQuery (без подстановочных знаков), я получу 1 ожидаемый удар.
// returns the 1 hit I expect
bq.Add( new WildcardQuery( new Term( "Typenummer",
"E5CEB501A244410EB1FFC4761F79E7B7" ) ), BooleanClause.Occur.MUST );
Я проверил длины полей, я проверил, что я использую тот же Анализатор и т. Д., И я все еще нахожусь в квадрате 1 относительно того, почему это так.
Кто-нибудь может указать мне направление, в котором я должен искать?