lucene 7.1 demo
1、基于maven;废话不多说,如下
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-smartcn</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2、IndexWriter(可以是实体,也可以是读取的文件)
2.1实体
@Test
public void add() throws IOException {
Article article = new Article();
article.setId(1);
article.setTitle("Lucene全文检索");
article.setContent("Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。");
final Path path = Paths.get("./article/");
Directory directory = FSDirectory.open(path);
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
Document document = new Document();
document.add(new TextField("id", article.getId().toString(), Field.Store.YES));
document.add(new TextField("title", article.getTitle(), Field.Store.YES));
document.add(new TextField("content", article.getContent(), Field.Store.YES));
indexWriter.addDocument(document);
indexWriter.close();
}
2.2 文件
@Test
public void addFile() throws IOException {
final Path path = Paths.get("./article/");
Directory directory = FSDirectory.open(path);
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("e:/2017_10_17.stderrout.log")));
String content = "";
while ((content = bufferedReader.readLine())!=null){
System.out.println(content);
Document document = new Document();
document.add(new TextField("logs", content, Field.Store.YES));
indexWriter.addDocument(document);
}
indexWriter.close();
}
3、Search(查询)
@Test
public void SearchFiles() throws IOException, ParseException {
// String queryString = "全文检索";
String queryString = "error";
//多条件
// Query q = MultiFieldQueryParser.parse(new String[]{},new String[]{},new StandardAnalyzer());
final Path path = Paths.get("./article/");
Directory directory = FSDirectory.open(path);
Analyzer analyzer = new StandardAnalyzer();
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
//单条件
QueryParser queryParser = new QueryParser("logs",analyzer);
Query query = queryParser.parse(queryString);
TopDocs topDocs = indexSearcher.search(query,10);
long conut = topDocs.totalHits;
System.out.println("检索总条数:"+conut);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
Document document = indexSearcher.doc(scoreDoc.doc);
System.out.print("相关度:"+scoreDoc.score+"-----time:"+document.get("time"));
System.out.println(document.get("logs"));
}
}