Литература Введение Lucene Обзор


Lucene - первое применение


Download 219.91 Kb.
bet5/13
Sana19.04.2023
Hajmi219.91 Kb.
#1363803
TuriЛитература
1   2   3   4   5   6   7   8   9   ...   13
Bog'liq
1 sam top

Lucene - первое применение


В этой главе мы познакомимся с реальным программированием с помощью Lucene Framework. Прежде чем вы начнете писать свой первый пример с использованием Lucene framework, вы должны убедиться, что вы правильно настроили свою среду Lucene, как описано в руководстве по настройке Lucene - Environment . Рекомендуется, чтобы у вас были рабочие знания Eclipse IDE.
Давайте теперь перейдем к написанию простого поискового приложения, которое будет печатать количество найденных результатов поиска. Мы также увидим список индексов, созданных в ходе этого процесса.

Шаг 1 - Создание Java-проекта


Первым шагом является создание простого Java-проекта с использованием Eclipse IDE. Выполните команду Файл> Создать -> Проект и, наконец, выберите мастер Java Project wizard из списка мастеров. Теперь назовите свой проект как LuceneFirstApplication, используя окно мастера следующим образом −

После успешного создания вашего проекта в вашем обозревателе проектов появится следующее содержимое −

Шаг 2 - Добавьте необходимые библиотеки


Теперь давайте добавим библиотеку Lucene core Framework в наш проект. Для этого щелкните правой кнопкой мыши на имени вашего проекта LuceneFirstApplication, а затем выполните следующую опцию, доступную в контекстном меню: Путь сборки -> Настроить путь сборки, чтобы отобразить окно пути сборки Java следующим образом −

Теперь используйте кнопку Добавить внешние банки, доступную на вкладке Библиотеки, чтобы добавить следующую основную банку из каталога установки Lucene −

  • lucene-core-3.6.2

Шаг 3 - Создание исходных файлов


Давайте теперь создадим реальные исходные файлы в рамках проекта LuceneFirstApplication. Сначала нам нужно создать пакет под названием com.tutorialspoint.lucene.Для этого щелкните правой кнопкой мыши на src в разделе "Проводник пакетов" и выберите опцию: Создать -> Пакет.
Далее мы создадим LuceneTester.java и другие классы Java в разделе com.tutorialspoint.пакет lucene.

LuceneConstants.java


Этот класс используется для предоставления различных констант, которые будут использоваться в примере приложения.
package com.tutorialspoint.lucene;

import java.io.File;


import java.io.FileFilter;

public class TextFileFilter implements FileFilter {


@Override


public boolean accept(File pathname) {
return pathname.getName().toLowerCase().endsWith(".txt");
}
}



TextFileFilter.java


Этот класс используется в качестве фильтра для файлов .txt.
package com.tutorialspoint.lucene;

import java.io.File;


import java.io.FileFilter;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;


import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Indexer{


private IndexWriter writer;


public Indexer(String indexDirectoryPath) throws IOException{


//this directory will contain the indexes
Directory indexDirectory =
FSDirectory.open(new File(indexDirectoryPath));

//create the indexer


writer = new IndexWriter(indexDirectory,
new StandardAnalyzer(Version.LUCENE_36),true,
IndexWriter.MaxFieldLength.UNLIMITED);
}

public void close() throws CorruptIndexException


writer.close();
}

private Document getDocument(File file) throws IOException{


Document document = new Document();

//index file contents


Field contentField = new Field(LuceneConstants.CONTENTS, new FileReader(file));
//index file name
Field fileNameField = new Field(LuceneConstants.FILE_NAME,
file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED);
//index file path
Field filePathField = new Field(LuceneConstants.FILE_PATH,
file.getCanonicalPath(),Field.Store.YES,Field.Index.NOT_ANALYZED);

document.add(contentField);


document.add(fileNameField);
document.add(filePathField);

return document;


}

private void indexFile(File file) throws IOException{


System.out.println("Indexing "+file.getCanonicalPath());
Document document = getDocument(file);
writer.addDocument(document);
}

public int createIndex(String dataDirPath, FileFilter filter)


throws IOException{
//get all files in the data directory
File[] files = new File(dataDirPath).listFiles();

for (File file : files) {


if(!file.isDirectory()
&& !file.isHidden()
&& file.exists()
&& file.canRead()
&& filter.accept(file)
){
indexFile(file);
}
}
return writer.numDocs();
}
}

package com.tutorialspoint.lucene;


import java.io.File;


import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;


import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Searcher{


IndexSearcher indexSearcher;
QueryParser queryParser;
Query query;
public Searcher(String indexDirectoryPath)
throws IOException{
Directory indexDirectory =
FSDirectory.open(new File(indexDirectoryPath));
indexSearcher = new IndexSearcher(indexDirectory);
queryParser = new QueryParser(Version.LUCENE_36,
LuceneConstants.CONTENTS,
new StandardAnalyzer(Version.LUCENE_36));
}
public TopDocs search( String searchQuery)
throws IOException, ParseException {
query = queryParser.parse(searchQuery);
return indexSearcher.search(query, LuceneConstants.MAX_SEARCH);
}

public Document getDocument(ScoreDoc scoreDoc)


throws CorruptIndexException, IOException {
return indexSearcher.doc(scoreDoc.doc);
}

public void close() throws IOException{


indexSearcher.close();
}
}


LuceneTester.java


Этот класс используется для тестирования возможностей индексации и поиска библиотеки lucene

Download 219.91 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   13




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling