Lucene 8.5.2核心API
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定义一个抽象AnalyzerAPI,用于将文本从Reader转换为TokenStream,枚举为Attributes 的枚举。可以通过将TokenFilters应用于的输出来组成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. ]

浙公网安备 33010602011771号