lucene内容创建查询Demo

[color=red]lucene内容创建,查询[/color]

package com.wj.lucene;

import java.io.File;
import java.util.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
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.SimpleFSDirectory;
import org.apache.lucene.util.Version;

/**
* Lucene3.0 CRUD操作
*
* @author jcom
* @date 2010-9-28
*
*/
public class CreateAndSearcherIndex {

public static void main(String[] args) throws Exception
{
// 保存索引文件的地方
String indexDir = "D:\\MOST\\data\\test\\indexDir";

// 创建Directory对象
Directory dir = new SimpleFSDirectory(new File(indexDir));

/**
* 创建IndexWriter对象,
* 第一个参数是Directory,
* 第二个是分词器,
* 第三个表示是否是创建, 如果为false为在此基础上面修改,
* 第四表示表示分词的最大值,比如说new MaxFieldLength(2),就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED
*/
IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(
Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED);

//准备加入索引的內容
Map<String, String> maps = new HashMap<String, String>();
maps.put("col1", "east");
maps.put("col2", "south");
maps.put("col3", "west");
maps.put("col4", "north");
maps.put("col5", "center");

/*
* 遍历键,通过键取值
* 循环创建加入
*/
Set set = maps.keySet();
for (Object key : set) {

String keyvalue = key.toString();
String value = maps.get(key);
System.out.println("键:" + keyvalue + " 值:" + value);

Document doc = new Document();
doc.add(new Field(keyvalue, value, Field.Store.YES,
Field.Index.NOT_ANALYZED));
indexWriter.addDocument(doc);
}

//提交关闭
indexWriter.commit();
indexWriter.close();


/**
* 搜索指定内容的字符串
*/
IndexSearcher indexSearch = new IndexSearcher(dir);
QueryParser queryParser = new QueryParser(Version.LUCENE_30, "col5",
new StandardAnalyzer(Version.LUCENE_30));
//指定查询内容
Query query = queryParser.parse("center");
TopDocs hits = indexSearch.search(query, 20);

System.out.println("一共找到:" + hits.totalHits + "条");

for (int i = 0; i < hits.scoreDocs.length; i++)
{
ScoreDoc sdoc = hits.scoreDocs[i];
Document doc = indexSearch.doc(sdoc.doc);
System.out.println("搜索的内容为:"+doc.get("col5"));
}

indexSearch.close();

}
}
好的,下面是一个简单的 Lucene9 的示例代码,包括创建索引和搜索: ```java 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.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; import java.nio.file.Paths; public class LuceneDemo { public static void main(String[] args) throws IOException, ParseException { // 创建索引 Directory directory = FSDirectory.open(Paths.get("index")); IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer()); IndexWriter writer = new IndexWriter(directory, config); Document doc1 = new Document(); doc1.add(new TextField("content", "Lucene is a full-text search engine library in Java", Field.Store.YES)); writer.addDocument(doc1); Document doc2 = new Document(); doc2.add(new TextField("content", "Lucene is used to build search applications", Field.Store.YES)); writer.addDocument(doc2); writer.close(); // 搜索 Directory directory2 = FSDirectory.open(Paths.get("index")); IndexSearcher searcher = new IndexSearcher(directory2); // TermQuery Query termQuery = new TermQuery(new Term("content", "search")); TopDocs topDocs = searcher.search(termQuery, 10); for (ScoreDoc scoreDoc : topDocs.scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); System.out.println(doc.get("content") + " score: " + scoreDoc.score); } // QueryParser QueryParser parser = new QueryParser("content", new StandardAnalyzer()); Query query = parser.parse("Lucene search"); TopDocs topDocs2 = searcher.search(query, 10); for (ScoreDoc scoreDoc : topDocs2.scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); System.out.println(doc.get("content") + " score: " + scoreDoc.score); } searcher.getIndexReader().close(); directory2.close(); } } ``` 以上代码创建了一个包含两条文档的索引,然后使用 TermQuery 和 QueryParser 分别进行了搜索,并打印出了搜索结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值