设为首页 收藏本站
查看: 897|回复: 0

[经验分享] SOLR 创建索引与创建搜索步骤

[复制链接]

尚未签到

发表于 2015-7-19 09:19:02 | 显示全部楼层 |阅读模式
  创建索引
1、创建Directory
2、创建IndexWriter
3、创建Document对象
4、为Document对象添加Field
5、通过IndexWriter添加Document对象到索引中
创建搜索
1、创建Directory
2、创建IndexReader
3、根据IndexReader创建IndexSearcher
4、创建搜索的query
5、根据searcher搜索并且创建TopDocs
6、根据TopDocs获取ScoreDoc对象
7、根据seacher和ScoreDoc对象获取具体的Document对象
8、根据Document对象获取需要的值
9、关闭Reader
  
  创建索引



Java代码   DSC0000.png

  • package com.langhua;  

  • import java.io.File;  
  • import java.io.FileReader;  
  • import java.io.IOException;  
  • import java.util.Date;  

  • import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  • import org.apache.lucene.document.DateTools;  
  • import org.apache.lucene.document.Document;  
  • import org.apache.lucene.document.Field;  
  • import org.apache.lucene.index.IndexWriter;  
  • import org.apache.lucene.store.Directory;  
  • import org.apache.lucene.store.SimpleFSDirectory;  
  • import org.apache.lucene.util.Version;  
  • /**
  • * 创建索引 Lucene 3.0+
  • * @author Administrator
  • *
  • */  
  • public class Indexer {  

  •     /**
  •      * @param args
  •      * @throws IOException  
  •      */  
  •     public static void main(String[] args) throws IOException {  
  •         //保存索引文件的地方  
  •         String indexDir = "F:\\indexDir";  
  •         //将要搜索TXT文件的地方  
  •         String dateDir = "F:\\dateDir";  
  •         IndexWriter indexWriter = null;  
  •         //创建Directory对象  
  •         Directory dir = new SimpleFSDirectory(new File(indexDir));  
  •         //创建IndexWriter对象,第一个参数是Directory,第二个是分词器,第三个表示是否是创建,如果为false为在此基础上面修改,第四表示表示分词的最大值,比如说new MaxFieldLength(2),就表示两个字一分,一般用IndexWriter.MaxFieldLength.LIMITED   
  •         indexWriter = new IndexWriter(dir,new StandardAnalyzer(Version.LUCENE_30),true,IndexWriter.MaxFieldLength.UNLIMITED);  
  •         File[] files = new File(dateDir).listFiles();  
  •         for (int i = 0; i < files.length; i++) {  
  •             Document doc = new Document();  
  •             //创建Field对象,并放入doc对象中  
  •             doc.add(new Field("contents", new FileReader(files)));   
  •             doc.add(new Field("filename", files.getName(),   
  •                                 Field.Store.YES, Field.Index.NOT_ANALYZED));
  •             doc.add(new Field("indexDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NOT_ANALYZED));  
  •             //写入IndexWriter  
  •             indexWriter.addDocument(doc);
  •         }
  •         //查看IndexWriter里面有多少个索引  
  •         System.out.println("numDocs"+indexWriter.numDocs());  
  •         indexWriter.close();

  •     }

  • }
  
搜索索引 Lucene 3.0+




Java代码  

    • package com.langhua;  

    • import java.io.File;  
    • import java.io.IOException;  

    • import org.apache.lucene.analysis.standard.StandardAnalyzer;  
    • import org.apache.lucene.document.Document;  
    • 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.SimpleFSDirectory;  
    • import org.apache.lucene.util.Version;  
    • /**
    • * 搜索索引 Lucene 3.0+
    • * @author Administrator
    • *
    • */  
    • public class Searcher {  

    •     public static void main(String[] args) throws IOException, ParseException {  
    •         //保存索引文件的地方  
    •         String indexDir = "F:\\indexDir";  
    •         Directory dir = new SimpleFSDirectory(new File(indexDir));  
    •         //创建 IndexSearcher对象,相比IndexWriter对象,这个参数就要提供一个索引的目录就行了  
    •         IndexSearcher indexSearch = new IndexSearcher(dir);  
    •         //创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器  
    •         QueryParser queryParser = new QueryParser(Version.LUCENE_30,  
    •                 "contents", new StandardAnalyzer(Version.LUCENE_30));  
    •         //生成Query对象  
    •         Query query = queryParser.parse("langhua9527");  
    •         //搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值  
    •         TopDocs hits = indexSearch.search(query, 10);  
    •         //hits.totalHits表示一共搜到多少个  
    •         System.out.println("找到了"+hits.totalHits+"个");  
    •         //循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值  
    •         for (int i = 0; i < hits.scoreDocs.length; i++) {  
    •             ScoreDoc sdoc = hits.scoreDocs;
    •             Document doc = indexSearch.doc(sdoc.doc);
    •             System.out.println(doc.get("filename"));              
    •         }
    •         indexSearch.close();
    •     }
    • }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-88149-1-1.html 上篇帖子: [原] solr 1.3 multicore使用指南 下篇帖子: SOLR配置dataimport
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表