Lucene 8.5.2核心API
Apache Lucene是一个高性能的全功能文本搜索引擎库。
另请:说明
Apache Lucene是一个高性能的全功能文本搜索引擎库。这是一个简单的示例,说明如何使用Lucene进行索引和搜索(使用JUnit检查结果是否符合我们的预期):
Analyzer analyzer = new StandardAnalyzer();
Path indexPath = Files.createTempDirectory("tempIndex");
Directory directory = FSDirectory.open(indexPath)
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Document doc = new Document();
String text = "This is the text to be indexed.";
doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
iwriter.addDocument(doc);
iwriter.close();
// Now search the index:
DirectoryReader ireader = DirectoryReader.open(directory);
IndexSearcher isearcher = new IndexSearcher(ireader);
// Parse a simple query that searches for "text":
QueryParser parser = new QueryParser("fieldname", analyzer);
Query query = parser.parse("text");
ScoreDoc[] hits = isearcher.search(query, 10).scoreDocs;
assertEquals(1, hits.length);
// Iterate through the results:
for (int i = 0; i < hits.length; i++) {
Document hitDoc = isearcher.doc(hits[i].doc);
assertEquals("This is the text to be indexed.", hitDoc.get("fieldname"));
}
ireader.close();
directory.close();
IOUtils.rm(indexPath);
Lucene API分为几个软件包:
org.apache.lucene.analysis
定义一个抽象Analyzer
API,用于将文本从Reader
转换为TokenStream
,枚举为Attribute
s 的枚举。可以通过将TokenFilter
s应用于的输出来组成TokenStreamTokenizer
。Tokenizer和TokenFilters串在一起并与一起应用Analyzer
。 analyticss -common提供了许多Analyzer实现,包括 StopAnalyzer 和基于语法的StandardAnalyzer。org.apache.lucene.codecs
提供了对倒排索引结构的编码和解码的抽象,以及可以根据应用程序需求选择的不同实现。org.apache.lucene.document
提供一个简单的Document
类。文档只是一组名为Field
的,其值可以是字符串或的实例Reader
。org.apache.lucene.index
提供了两个主要的类:IndexWriter
,用于创建文档并将其添加到索引;和IndexReader
,用于访问索引中的数据。org.apache.lucene.search
提供表示查询的数据结构(即TermQuery
用于单个单词,PhraseQuery
短语和BooleanQuery
查询的布尔组合)IndexSearcher
,并将查询转换成TopDocs
。提供了许多QueryParser,用于从字符串或xml生成查询结构。org.apache.lucene.store
定义用于存储持久性数据的抽象类,该类Directory
是由编写并由IndexOutput
读取的命名文件的集合IndexInput
。提供了多种实现,但是FSDirectory
通常建议您这样做,因为它会尝试有效地使用操作系统磁盘缓冲区高速缓存。org.apache.lucene.util
包含一些方便的数据结构和util类,即FixedBitSet
和PriorityQueue
。
Document
通过添加来 创建Field
;- 使用创建一个
IndexWriter
并向其中添加文档addDocument()
; - 调用QueryParser.parse() 从字符串中构建查询;和
- 创建一个
IndexSearcher
并将查询传递给其search()
方法。
- IndexFiles.java为目录中包含的所有文件创建索引。
- SearchFiles.java提示查询并搜索索引。
> java -cp lucene-core.jar:lucene-demo.jar:lucene-analyzers-common.jar org.apache.lucene.demo.IndexFiles -index index -docs rec.food.recipes/soups
adding rec.food.recipes/soups/abalone-chowder
[ ... ]> java -cp lucene-core.jar:lucene-demo.jar:lucene-queryparser.jar:lucene-analyzers-common.jar org.apache.lucene.demo.SearchFiles
Query: chowder
Searching for: chowder
34 total matching documents
1. rec.food.recipes/soups/spam-chowder
[ ... thirty-four documents contain the word "chowder" ... ]Query: "clam chowder" AND Manhattan
Searching for: +"clam chowder" +manhattan
2 total matching documents
1. rec.food.recipes/soups/clam-chowder
[ ... two documents contain the phrase "clam chowder" and the word "manhattan" ... ]
[ Note: "+" and "-" are canonical, but "AND", "OR" and "NOT" may be used. ]