传说中强大的Lucene搜索,首先要创建索引:
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.index.Term;
import org.apache.lucene.store.LockObtainFailedException;
public class TextFileIndexer {
private IndexWriter indexWriter;
public TextFileIndexer(String directory) {
try {
indexWriter = new IndexWriter(directory, new StandardAnalyzer(),
true);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TextFileIndexer indexer = new TextFileIndexer("/home/com/tmp/index");
indexer.create("/home/sina", "axu你发三段论法的撒肥撒旦", "了脑门大量的萨考虑我的");
indexer.create("/home/blog", "9726", "java");
// indexer.delete("/home/blog");
indexer.commit();
}
public void create(String path, String title, String content) {
Document document = new Document();
Field fieldPath = new Field("path", path, Field.Store.YES,
Field.Index.NO);
Field fieldTitle = new Field("title", title, Field.Store.YES,
Field.Index.TOKENIZED);
Field fieldContent = new Field("content", content, Field.Store.NO,
Field.Index.TOKENIZED);
document.add(fieldPath);
document.add(fieldTitle);
document.add(fieldContent);
try {
indexWriter.addDocument(document);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void commit() {
try {
indexWriter.optimize();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void delete(String path) {
Term term = new Term("path", path);
try {
indexWriter.deleteDocuments(term);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void update(String path, String title, String content) {
this.delete(path);
this.create(path, title, content);
}
}
然后就可以进行搜索了,搜索创建好的索引:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
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.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.LockObtainFailedException;
public class TextFileSearcher {
private IndexSearcher searcher;
public TextFileSearcher(String directory) {
try {
searcher = new IndexSearcher(directory);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
TextFileSearcher indexer = new TextFileSearcher("/home/com/tmp/index");
List<Document> list = indexer.search("9726");
for (Document document : list) {
System.out.println(document.get("path"));
}
}
public List<Document> search(String keyword) {
List<Document> resultset = new ArrayList<Document>();
Analyzer analyzer = new StandardAnalyzer();
try {
QueryParser parser = new QueryParser(null, analyzer);
Query query = parser.parse("title:" + keyword + " OR content:"
+ keyword);
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
resultset.add(hits.doc(i));
}
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return resultset;
}
}
分享到:
相关推荐
根据提供的标题、描述和部分文本内容,我们可以推测“Lucene in Action”这本书是关于Lucene这一强大全文搜索引擎库的深入介绍和技术指南。由于提供的部分内容仅包含试用版本声明及网址,无法从中直接提取具体的技术...
你可以通过试用下面的网站来测试部分功能。 遇到任何技术问题,或对搜索创意感兴趣,欢迎加入寻TA网官方QQ群(298342166)讨论,也可发邮件(Email:1019357922@qq.com)或致电(18521702948,13817385089)垂询. 下载...
标题“LucenePrograms:一些试用 Lucene 程序的回购”指出,这是一组基于Lucene的示例程序,用于帮助开发者了解和实践如何使用Lucene这个全文搜索引擎库。Lucene是Apache软件基金会的一个开源项目,它提供了一个高级...
2. **lucene-kuromoji-3.6.2.jar**:Apache Lucene是一个全文搜索引擎库,而kuromoji是其针对日语的分词器。这个组件能够对日语文档进行索引和搜索,对日文文本处理具有重要意义。 3. **lucene-smartcn-3.6.2.jar**...
首先,Elasticsearch是一个基于Lucene构建的开源搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并在Apache许可证下作为开源发布。它是一种广泛使用的...
- **Compass** 作为连接 Lucene 和 Hibernate 的桥梁,提供了类似于 Hibernate 的接口来操作 Lucene。 - **特点**:简化了 Lucene 的使用,同时保留了 Lucene 的高性能和灵活性。 #### 三、Compass 的使用步骤 ...
尽管给出的部分内容反复提到“trial version”(试用版)并指向了一个似乎是无关的网站“www.adultpdf.com”,但我们可以假设这里的目标是探讨与Lucene相关的知识点。 ### Lucene简介 Apache Lucene是一个开放源...
- `wa-lucene2_source_code`:这个名字暗示它与Lucene有关,Lucene是Apache的一个全文搜索引擎库。在这个上下文中,`wa-lucene2_source_code`可能是一个使用Lucene进行网页内容搜索和索引的项目源代码。在爬虫项目...
like、Lucene、es、OpenSearch) 用户投稿 页面管理 评论管理 附件管理 电商相关 产品管理 产品分类 产品标签 产品搜索(支持 sql like、Lucene、es、OpenSearch) 产品分销 会员管理 订单管理 分销管理 提现管理 ...
Elasticsearch是一种开源的全文搜索引擎,基于Lucene构建,具有分布式、实时、高可扩展性等特点。它不仅能够处理海量数据,还支持复杂的搜索功能,广泛应用于日志分析、网站搜索、物联网数据分析等领域。Elastic...
Elasticsearch(简称ES)是一款流行的、基于Lucene的开源搜索引擎,被广泛应用于日志分析、实时监控、数据搜索和大数据分析等多个领域。版本6.3是其历史上的一个重要版本,带来了许多性能优化和新特性。 1. **版本...
弹性搜索框 一个带有kuromoji插件的用于Elasticsearch的wercker盒子。入门$ git clone https://github.com/wantedly/box-kuromoji-elasticsearch.git && cd box-kuromoji-elasticsearch$ script/bootstrap版本0.1.0 ...
Elasticsearch是一个基于Lucene构建的开源搜索引擎,它允许用户快速执行全文搜索、结构化搜索甚至是复杂分析。Intellij IDEA是一个强大的集成开发环境(IDE),它广泛用于Java开发,并支持其他编程语言和框架,包括...