A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

第一步: 导入相关的jar包(pom依赖)
[XML] 纯文本查看 复制代码
<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-core</artifactId>
			<version>4.10.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-queries</artifactId>
			<version>4.10.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-test-framework</artifactId>
			<version>4.10.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-analyzers-common</artifactId>
			<version>4.10.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-queryparser</artifactId>
			<version>4.10.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-highlighter</artifactId>
			<version>4.10.2</version>
		</dependency>

第二步: 编写入门案例
[Java] 纯文本查看 复制代码
public class IndexWriterTest {

    public static void main(String[] args) throws  Exception {
        //1. 创建一个写入索引器对象
        //在开发环境下, 路径的位置, 不要有空格和中文
        FSDirectory directory = FSDirectory.open(new File("H:\\test"));
        IndexWriterConfig config = new IndexWriterConfig(Version.LATEST,new StandardAnalyzer());
        IndexWriter indexWriter = new IndexWriter(directory,config);

        //2. 添加原始文档数据
        Document doc = new Document();  // 这只是一个空的文档
        doc.add(new LongField("id",1L, Field.Store.YES));
        doc.add(new StringField("title","lucene介绍", Field.Store.NO));
        doc.add(new TextField("content","lucene是一个全文检索的工具包, 使用lucene来构建一个搜索引擎", Field.Store.YES));
        indexWriter.addDocument(doc);

        //3. 提交数据
        indexWriter.commit();

        //4. 释放资源(关闭索引写入器)
        indexWriter.close();
    }
}

第三步:查询入门
[Java] 纯文本查看 复制代码
//1. 查询索引的入门代码
    @Test
    public void indexSearchTest01() throws  Exception{
        //1. 创建查询索引器的对象
        DirectoryReader reader = DirectoryReader.open(FSDirectory.open(new File("H:\\test")));
        IndexSearcher indexSearcher = new IndexSearcher(reader);

        //2. 执行查询
        //2.1 使用查询解析器, 帮我们构建查询对象
        // 注意:  写入索引使用的分词器要和 查询使用的分词器要保持一致
        QueryParser queryParser = new QueryParser("content",new IKAnalyzer());
        //传递用户输入的关键词
        Query query = queryParser.parse("碉堡了"); //碉堡   了  碉堡了
        // topDocs: 返回的文档集合:  包含了两部分 : 总共查询到了多少条数据(整个索引库中符合条件的一共有多少), 文档数据集合
        TopDocs topDocs = indexSearcher.search(query, Integer.MAX_VALUE);

        //3. 获取文档数据
        int len = topDocs.totalHits;//总条数
        ScoreDoc[] scoreDocs = topDocs.scoreDocs; //得分文档的集合 : 文档的得分, 文档的id值

        for (ScoreDoc scoreDoc : scoreDocs) {

            float score = scoreDoc.score; //得分数
            System.out.println(score);
            // lucene自己进行维护的文档的唯一标识: 从0开始
            int docId = scoreDoc.doc;

            Document document = indexSearcher.doc(docId);

            //根据文档对象, 获取文档数据
            String id = document.get("id");
            String title = document.get("title");
            String content = document.get("content");

            System.out.println("文档的id是: "+ id+";文档的标题是: "+ title+";文档的内容是: "+ content);

        }

    }


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马