终于全文检索这块弄完了,在此总结一下。
先介绍一下为什么要用全文检索,当数据库查询字符串时 通常用like 来进行比较,当有大量文本时,从中检索出有用的信息会产生大量的性能开销,而全文检索,则是先对文本进行分词,然后对词进行索引,因此你搜索一个词时 ,速度会很快。
不过建立索引的过程 也是一个很大的开销,^_^。索引只需要建立一次,以后就可以很方便的进行查询了。
lucene是一个用java编写的全文检索的组件,是对上面的全文检索原理的实现,可以很方便的集成到自己的系统中,实现自己的全文检索。lucene对中文支持不好,需要使用其他的中文分词包,目前比较好的 有:ik,paoding,je 等。
lucene的基本存储单位是 document ,可以将其和record等价,因此你可以写convert方法,将record转换成document就能进行索引了。field可以看成字段
lucene有 delete,save,search三个基本操作。
delete操作, indexReader.delete(term),indexReader(int doc)
indexwriter 中也有相应的方法
save 操作,只能通过indexwriter 来进行 indexwrite.addDocument()
查询 . indexsearch.search(query ,topcollector)
有 termquery 可以查询一个字段,booleanquery可以查询多个字段
lucene还支持查询语法,常用的有 and or not 其他的我没去记 ^_^
topcollector 中有一个topdocs()方法,这个方法是生成 topdoc[] 只能调用一次。