流程图检索-相关-lucene

lucene在我们的项目中,作用比较简单,只是用来过滤,进行第一步的筛选工作而已。

首先要了解到的是倒排索引。这个技术对于搜索很关键。并且它有一个优点,就是关键字的数量并非随着文本内容的增长而线性增长。关键字表其实已经比较规范了。一旦完成了索引的建立,就会给我们搜索节省大量时间。

其次是lucene做的一些工作。

第一步是建立索引。

使用到了IndexWriter这个类。new IndexWriter(PATH, Analyzer, true),这样的设置,指定索引存放的位置,使用到的分析器(实际用的是现成的一个StanderdAnalyzer)。

然后建立一个新的Document,new Document(); 在这个document里添加进我们需要设置的域field,new Field("filepath", file.name , Field.Store.Yes, Field.Index.TOKENIZED); 最后就可以write了。大概流程如下:

IndexWriter indexWriter  = new IndexWriter(PATH, Analyzer, true);

Document doc = new Document(); 

Field field1 = new  Field("filepath", file.name , Field.Store.Yes, Field.Index.TOKENIZED);

Field field2 = new  Field("filetext", file.name , Field.Store.Yes, Field.Index.TOKENIZED);

....

doc.add(field1);

doc.add(field2);

...

indexWriter.addDocument(doc);

...

indexWriter.close();

...

这样,就完成了建立索引的操作,就会在具体的位置,有相关的索引文件。

其次,到Document和Field的一些机制问题。

Document在Lucene中代表一种逻辑文件。一般是一个Document与一个物理文件读应起来,但是又不一定。比如可以将所有的目录名字存在一个document中。

Lucene是为这些Document建立索引的。

在一个Document中,它使用Field来表示其所汇集的数据。看它们的构造函数,它们与一个typename对应,而且可以标明这个field是否需要存储,需要分词,需要建立索引等信息。

在我们的实现中,由于是要存路径,搜索内容。所以是用几个Field存了它们的文件路径,文件内容等。

当然,在对文件内容进行存储前,使用了内部的一些预处理工具,如LowerCaseTokenizer,PorterStemFilter等,再它们各个单词组合到一个String中(中间用“ ”分开)。

While(token != null) {
sentence += to.termText() + " ";

}

document.add(new Field("text", sentence, Field.Store>YES, Field.Index.ANALYZED));

然后到搜索。

使用IndexSearcher, 根据索引位置建立这个。建立搜索的单元,Term, 生成一个Query,于是,可以获得枚举的对象TermDocs。再一一遍历这个对象。

IndexSearcher searcher = new IdexSearcher(PATH);

Term t = new Term(searchtype, searchkey);

Query q = new TermQuery(t);

TermDocs docs = searcher.getIndexReader().termDocs(t);

//遍历docs,获得需要的filed,get("path");




//代码摘自《开发自己的搜索引擎》


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值