2012-04-05 3 views
0

У меня есть существующий индекс с некоторыми документами, которые я пытаюсь выполнить.
Когда я ищу «реальное текстовое поле», все в порядке.
Когда я пытаюсь найти поле, которое является числом, поиск дает 0 результатов.
код что-то вроде этого (это pylucene но концепция та же):запрос строкового номера в lucene ничего не находит

dir = SimpleFSDirectory(File(indexDir)) 
analyzer = StandardAnalyzer(Version.LUCENE_CURRENT) 
searcher = IndexSearcher(dir) 
query = QueryParser(Version.LUCENE_CURRENT, "id", analyzer).parse("902") 
hits = searcher.search(query, MAX) 
print hits.totalHits #gives me 0 

поиск Лука (ID: 902) дает мне пустые результаты.
Когда я смотрю вкладку «Обзор» на luke, это говорит о том, что это поле UTF-8 (строка)

Что-нибудь я делаю неправильно?

редактировать:
Оказывается это происходит на полях, которые индексируются и не имеет норм (в соответствии с флагами Луки).
Может кто-нибудь объяснить это?

ответ

2

Мне не нравится отвечать на мои собственные вопросы, но я считаю, что этот ответ является важной ссылкой.
Раствор помещают запрос NumericRange с обоими номерами номер, искать (на этот раз в Java):

NumericRangeQuery.newIntRange("id", Integer.valueOf(902), Integer.valueOf(902), 
true, true)  
1

Вы используете SimpleAnalyzer при индексировании? Он удаляет цифры. Убедитесь, что вы используете тот же анализатор во время индексации и поиска.

+0

, к сожалению, я не делал индекс. Любые идеи анализаторов я должен попробовать? – Boaz

+0

Для тестирования не используйте StandardAnalyzer, потому что он сложный. Основными анализаторами для использования являются WhitespaceAnalyzer и KeywordAnalyzer. Первый разбивает вашу строку на токены пробелами, в то время как последний не делает токенизацию и всегда дает вашу точную строку как один токен. Чтобы проверить сторону индекса, получите список всех индексированных терминов и посмотрите, можете ли вы найти на нем какие-либо номера. –

Смежные вопросы