lucene代码笔记1

import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexableField;
import org.apache.lucene.index.Term;
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.util.Version;
import org.junit.Test;

/*8
 * 使用lucene 对数据建立索引..
 * 
 */
public class TestLucene {

    /**
     * 
     * 使用indexWriter 对数据建立索引..
     * @throws IOException 
     */
    @Test
    public void testCreateIndex() throws IOException{
        //索引存放的位置....
        Directory directory=FSDirectory.open(new File("indexDir/"));
        //lucene 当前使用的匹配版本...
        Version matchVersion=Version.LUCENE_44;
        //分词器  (对文本进行分词...)
        //我是中国人
        //也是醉了,正能量,逗比,带你装b带你飞
        Analyzer analyzer=new StandardAnalyzer(matchVersion);
        //索引写入的配置...
        IndexWriterConfig writerConfig=new IndexWriterConfig(matchVersion, analyzer);
        //构建用于操作索引的类
        IndexWriter indexWriter=new IndexWriter(directory, writerConfig);
        //通过indexWriter 来创建索引...
        //索引库里面的要遵守一定的结构,(索引结构...)    document
        Document doc=new Document();
        //索引document 里面也有很多的字段..
        /**
         * 1:字段的名称
         * 2:字段对应的值
         * 3:该字段在索引库当中是否存储...
         */
        IndexableField field=new IntField("id", 1, Store.YES);
        IndexableField title=new StringField("title", "JAVA 培训,传智播客专注Java培训10年", Store.YES);
        IndexableField content=new TextField("content", "java培训的龙头老大,口碑最好的java培训机构,进来看看同学们的呐喊,",Store.YES);
        doc.add(field);
        doc.add(title);
        doc.add(content);
        indexWriter.addDocument(doc);
        indexWriter.close();
    }
    /**
     * 使用indexSearcher 对数据进行搜索...
     * @throws IOException 
     * 
     * 
     */
    @Test
    public void testSearcher() throws IOException{

        //索引存放的位置....
        Directory directory=FSDirectory.open(new File("indexDir/"));

        IndexReader indexReader=DirectoryReader.open(directory);

        //通过indexSearcher 去检索索引目录...
        IndexSearcher indexSearcher=new IndexSearcher(indexReader);

        //我们以后只要根据索引查找,整个过程肯定要分两次..

        //这个是一个搜索条件..,通过定义条件来进行查找...
        //term 我需要根据那个字段进行检索,字段对应的值...
        Query query=new TermQuery(new Term("title","JAVA 培训,传智播客专注Java培训10年"));

        //搜索先搜索索引目录..
        //找到符合query 条件的前面N条记录...
        TopDocs topDocs=indexSearcher.search(query,100);
        System.out.println("总记录数==="+topDocs.totalHits);
        ScoreDoc scoreDocs[]=topDocs.scoreDocs;
        //返回一个击中..
        for(ScoreDoc scoreDoc:scoreDocs){
            int docID=scoreDoc.doc;
            Document document=indexSearcher.doc(docID);
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));            
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值