创建索引和搜索

package cn.dyg.luence;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryParser.ParseException;
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.FSDirectory;
import org.apache.lucene.util.Version;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 * Created by Administrator on 2016/11/2.
 */
public class IndexUtil {

    private static final Logger logger = LoggerFactory.getLogger(IndexUtil.class);

    private static final String indexPath = "E:\\javaweb\\luenceRepository\\index";

    private IndexUtil() { }

    public static IndexReader getIndexReader() {

        logger.info("this is the indexReader ...");
        return null;
    }

    public static void setIndexWriter() {
        //1 创建Directory
//        Directory directory = new RAMDirectory();   //索引建立在内存中
        Directory directory = null;   //索引建立在磁盘中
        try {
            directory = FSDirectory.open(new File(indexPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2 创建IndexWriter
        IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
        IndexWriter indexWriter = null;
        try {
            indexWriter = new IndexWriter(directory, indexWriterConfig);
            //3 创建文档对象
            Document document = null;
            //4 为文档添加filed
            File fileList = new File("E:\\javaweb\\luenceRepository\\example");
            for (File file : fileList.listFiles()) {
                document = new Document();
                document.add(new Field("content", new FileReader(file)));
                document.add(new Field("name", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                document.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                //5 通过IndexWriter 添加文档到索引中
                indexWriter.addDocument(document);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (indexWriter != null) {
                try {
                    indexWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void search() {
        //1 创建Directory
//        Directory directory = new RAMDirectory();   //索引建立在内存中
        Directory directory = null;   //索引建立在磁盘中
        try {
            directory = FSDirectory.open(new File(indexPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2 创建IndexReader
        IndexReader indexReader = null;
        try {
            indexReader = IndexReader.open(directory);
            //3 创建search
            IndexSearcher indexSearcher = new IndexSearcher(indexReader);
            //4 创建搜索的Query
            QueryParser queryParser = new QueryParser(
                    Version.LUCENE_35,
                    "content",
                    new StandardAnalyzer(Version.LUCENE_35)
            );
            //5 创建Query, 表示搜索域为content中包含java的文档
            Query query = queryParser.parse("3350527960");
            //6 根据searcher搜索并返回TopDocs
            int queryLimit = 10;
            TopDocs topDocs = indexSearcher.search(query, queryLimit);
            //7 根据topDocs获得scoreDocs
            ScoreDoc[] scoreDocs = topDocs.scoreDocs;
            int i = 0;
            for (ScoreDoc scoreDoc : scoreDocs) {
                //8 根据searcher 和ScoreDoc获取document对象
                Document document = indexSearcher.doc(scoreDoc.doc);
                logger.info(i + document.get("path") + document.get("name"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } finally {
            if (indexReader != null) {
                try {
                    indexReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

  

时间: 2024-12-23 18:46:59

创建索引和搜索的相关文章

Solr笔记四之Solrj创建索引和搜索的一般步骤

在solrj中创建索引的一般步骤:      1)创建一个SolrServer对象,SolrServer用于管理索引      2)创建SolrInputDocument对象,即文档对象,并且向文档对象添加字段      3)利用SolrServer对象的add方法添加SolrInputDocument对象,创建索引       4)调用SolrServer对象的commit()方法提交索引.       例如:            HttpSolrServer hss=new HttpSol

Lucene.net 从创建索引到搜索的代码范例

关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB中加载.Field.Store.YES:存储字段值(未分词前的字段值)Field.Store.NO:不存储,存储与索引没有关系Field.Store.COMPRESS:压缩存储,用于长文本或二进制,但性能受损Field.Index.ANALYZED:分词建索引 Field.Index.ANALYZE

搜索引擎系列 ---lucene简介 创建索引和搜索初步

一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子的中名,同时这也她外祖母的姓;目前是Apache基金会的一个顶级项目,同时也是学习搜索引擎入门必知必会. Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作. 优点:成熟的解决方案,有很多的成功案例.apache 顶级项目,正在持续快速的进步.庞大而活跃的开

搜索引擎系列 -lucene简介 创建索引和搜索初步步骤

一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子的中名,同时这也她外祖母的姓;目前是Apache基金会的一个顶级项目,同时也是学习搜索引擎入门必知必会. Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作. 优点:成熟的解决方案,有很多的成功案例.apache 顶级项目,正在持续快速的进步.庞大而活跃的开

Elasticsearch搜索API使用一:创建索引并指定索引类型的mapping

ES默认是动态创建索引和索引类型的mapping的.这就相当于无需定义Solr中的Schema,无需指定各个字段的索引规则就可以索引文件,很方便.但有时方便就代表着不灵活.比如,ES默认一个字段是要做分词的,但我们有时要搜索匹配整个字段却不行.如有统计工作要记录每个城市出现的次数.对于NAME字段,若记录"new york"文本,ES可能会把它拆分成"new"和"york"这两个词,分别计算这个两个单词的次数,而不是我们期望的"new

lucene3.0+版本中文分词测试+搜索结果+创建索引测试

lucene3.0+版本中文分词测试+搜索结果+创建索引测试 import java.io.File; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.

solr之创建core(搜索核心,包括索引和数据)的方法

我的solrhome为D:\solrHome\solr step1:进入solrHome会看到collection1文件夹,创建该文件夹的副本,重命名为product 进入product文件夹,进入data文件夹,删掉里面的两个目录. step2:好了,然后来开始创建索引了. 前提,进入tomcat中webapps的solr项目的web.xml中设置solrHome地址 <env-entry>    <env-entry-name>solr/home</env-entry-n

Elasticsearch创建索引和映射结构详解

前言 这篇文章详细介绍了如何创建索引和某个类型的映射. 下文中[address]指代elasticsearch服务器访问地址(http://localhost:9200). 1       创建索引 1.1     简单创建语句 curl -XPUT [address]/blog 1.2     带参数的创建语句 curl -XPUT [address]/blog/ -d '{ "settings":{ "number_of_shards":1,     //设置分

sql 高级 (五)(create index(创建索引) drop)

SQL create index 语句 create  index语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 用户无法看到索引,它们只能被用来加速搜索/查询. 更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新. 理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引. 允许使用重复的值: create index  index_name ON table_name (column_name) SQL create