2013-08-13 5 views
0

Я создал Lucene (3.0.1) индекса на колонку для поиска с в тексте, на тестирование по этому тексту:поиска в индексе Lucene

$GLD is a great example of why it does not make sense EVER to try and catch a falling knife. 

Это дает мне результат, если при поиске по ключевому слову "falling" но Я не подвожу ничего о поиске по "$GLD"

Я использую standardAnalyzer:

String longString = "$GLD is a great example of why it does not make sense EVER to try and catch a falling knife." 

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); 
doc.add(new Field("data", longString, Store.YES, Field.Index.ANALYZED)); 

Поскольку Field.Index.ANALYZED установлена, она должна создавать маркеры и $GLD. Анализатор удалит стоп-слова из текста, и слово $GLD также будет удалено в процессе.

+1

Вы указываете один и тот же «Анализатор» при создании своего «QueryParser»? «$ GLD», скорее всего, преобразуется (я верю в «gld»), и если при индексировании и в QueryParser используются разные анализы или разные версии, конечные результаты анализа могут не совпадать. – femtoRgon

+0

Я не определяю 'QueryParser' и' Analyzer' в поиске запроса, я использую 'IndexSearcher searcher = новый IndexSearcher (каталог); ',' TermRangeQuery' и 'TermQuery'. Но он смог выполнить поиск по gld, спасибо за помощь. –

ответ

0

Поле вашего документа изменено с помощью анализатора. Почему бы вам не использовать Analyzer по вашему запросу перед тем, как искать. Тем временем QueryParser очень помог.

0

Вы должны проверить StandardAnalyzer, то StandardAnalyzer может удалить $ и может использовать LowerCaseFilter в порядке (я не уверен, я просто знаю, 2.3 и 4.1). LowerCaseFilter сделает слова в нижнем регистре. Когда вы будете искать письмо в верхнем регистре, вы ничего не получите.

Вы можете использовать Luke для проверки выраженного результата в индексе.

0

Он также помогает использовать Luke, чтобы проверить, что ваш запрос выполняет то, что вы думаете.

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