TermQuery не возвращается по известному поисковому запросу, но WildcardQuery возвращает

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

Может ли кто-нибудь указать мне направление, в котором я должен искать?

7
задан Mark Cassidy 1 March 2012 в 08:25
поделиться