Я надеюсь, что кто-то, обладающий достаточным пониманием внутренней работы 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 относительно того, почему это так.
Может ли кто-нибудь указать мне направление, в котором я должен искать?