надеюсь кто-то с достаточно понимания внутренней работы Lucene могли бы мне точку в правильном направлении =)TermQuery не возвращаются на известном поисковому запросу, но WildcardQuery делает
Я пропущу большую часть окружающий истребительный код, и вырезать право на погоню. У меня есть индекс Lucene, к которому я добавляю следующее поле с индексом (переменные заменены на их буквенные значения):
document.Add(new Field("Typenummer", "E5CEB501A244410EB1FFC4761F79E7B7",
Field.Store.YES , Field.Index.UN_TOKENIZED));
Позже, когда я искать свой индекс (используя другие типы запросов), я в состоянии проверить, что это поле действительно появляется в моем индексе - например, когда цикл через все поля, возвращаемые по Document.GetFields()
Field: Typenummer, Value: E5CEB501A244410EB1FFC4761F79E7B7
до сих пор так хорошо :-)
Теперь реальная проблема заключается в - почему я не могу использовать TermQuery для поиска по этому значению и фактически получить resu л.
Этот код производит 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, почему это.
Может ли кто-нибудь указать мне направление, которое я должен искать?
Я не очень хорошо знаком с Lucene.net, но если он использует ту же структуру индекса, что и версия java, вы можете использовать Luke http://code.google.com/p/luke/, чтобы проверить, что ваш индекс структура соответствует вашим ожиданиям.В качестве альтернативы, вы могли бы проверить, позволяет ли TermIndex # seekExact найти ваш термин? – jpountz