2015-01-21 2 views
0

, если я использую только StringField и StoredField для индексирования и поиска, что такое использование анализаторов?Что такое использование Lucene Analyzer, когда я использую StringField и StoredField

Поскольку StringFields не являются токенизированными, мне хотелось бы узнать, что представляет собой реальное использование анализаторов здесь?

Могу ли я написать индексирование lucene без анализаторов?

ответ

0

Если вы используете StoredField, индексации не происходит вообще. Документ просто сохраняется.

Если вы используете StringField, все поле индексируется как один токен, и нет смысла использовать анализаторы. Я просто попытался запустить следующий код:

Directory dir = new RAMDirectory(); 
Analyzer analyzer = null; 
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_10_1, analyzer); 
IndexWriter indexWriter = new IndexWriter(dir, iwc); 

Document doc1 = new Document(); 
doc1.add(new StringField("title", "aa", Field.Store.YES)); 
indexWriter.addDocument(doc1); 
indexWriter.commit(); 

IndexReader reader = IndexReader.open(dir); 
IndexSearcher searcher = new IndexSearcher(reader); 
// print results using MatchAllDocsQuery 

И он работал без исключения исключения.

+0

Спасибо @mindas .. я попробую это. Но одна вещь, которую я всегда слышу от людей, - это то, что нам нужно использовать один и тот же анализатор как в индексировании, так и в поиске, иначе мы использовали некоторые неправильные результаты поиска ... – Shankar

+0

Если у вашего документа только это поле, запрос должен использовать 'KeywordAnalyzer', поскольку этот анализатор работает со всем потоком в виде единственного токена. – mindas

+0

Спасибо @mindas .. передающий анализатор как нуль при индексировании и использовании TermQuery для поиска работает отлично .. также получил некоторое повышение производительности, когда я использую StringField вместо TextField. – Shankar