lucene3.5
文章平均质量分 68
chongqingnantian
这个作者很懒,什么都没留下…
展开
-
一、初步认识lucene
环境搭建:1、lucene-core-3.5.0.jar2、mmseg4j-all-1.8.5-with-dic.jar(中文分词器)3、lucene-highlighter-3.5.0.jar、lucene-memory-3.5.0.jar(高亮显示) 在全文索引工具中,都是由这样的三部分组成 1、索引部分(I am a boy) 2、...原创 2012-11-19 14:42:52 · 80 阅读 · 0 评论 -
十六、搜索排序
public void searcherBySort(String queryStr,Sort sort) { try { IndexSearcher searcher = getSearcher(); QueryParser parser = new QueryParser(Version.LUCENE_35,"c...原创 2012-12-19 12:14:39 · 74 阅读 · 0 评论 -
十八、自定义评分
public class MyCustomScoreProvider extends CustomScoreProvider { public MyCustomScoreProvider(IndexReader reader) { super(reader); } /** ...原创 2012-12-19 16:18:54 · 92 阅读 · 0 评论 -
十九、自定义QueryParser
原因:1、对于某些QueryParser(FuzzyQuery,WildcardQuery)在查询时会使得性能降低,所以考虑将这些查询取消2、在具体的查询时,很有可能有这样一种需求:需要获取的是一个数字的范围查询。所以必须扩展原有的QueryParser才能进行查询实现思路:覆盖QueryParser类,并且重载相应方法public class CustomPa...原创 2012-12-19 16:28:15 · 73 阅读 · 0 评论 -
十七、搜索过滤
public void searcherByFilter(String queryStr,Filter filter) { try { IndexSearcher searcher = getSearcher(); QueryParser parser = new QueryParser(Version.LUCENE_35,"c...原创 2012-12-20 09:23:42 · 54 阅读 · 0 评论 -
二十、自定义过滤器
有的应用有些要求,对于某类型的内容即使满足条件了,但是也不能被搜索出来,lucene中提供了过滤器的功能,通过自定义的过滤器继承Filter,从而实现特定的过滤功能。Filter是一种过滤行为BitSet是一种位集合队列,这个队列中只有两种取值,TRUE或FALSE,LUCENE以这两种取值代表文档是否被过滤,也就是说,LUCENE返回结果时,...原创 2012-12-20 09:23:53 · 68 阅读 · 0 评论 -
二十一、Luke
luke是一个查询索引的工具,使用时必须注意:版本要与lucene的版本完全一致,否则可能打不开索引信息java -jar luke-xx-xx.jar可以打开索引选择索引所存储的目录,就可以使用luke查询和操作相应的索引信息,并且可以在search中根据QueryParser来查询相应的信息...原创 2012-12-20 09:24:28 · 80 阅读 · 0 评论 -
二十二、Tika
Tika是2008年才产生的一个apache的项目,主要用于打开各种不同的文档,1.0public class IndexUtil { public void index() { try { File f = new File("d:/lucene/example2/MyBatis 3 User Guide ...原创 2012-12-20 09:24:41 · 93 阅读 · 0 评论 -
二十三、高亮显示
public void lighter01() { try { String txt = "我爱北京,上彩旗飞,伟大领袖,指引我们向前进,向前进!!!想起身离开东京法律思考的机会 那个上的讲话那伟大的个圣诞sadfsadnfl.sajdfl;aksjdf;lsadfsadfm.asd那是肯定...原创 2012-12-20 09:24:51 · 80 阅读 · 0 评论 -
二十四、通过NRTManager和SearchManager实现近实时搜索
是否进行实时搜索 实时搜索(近实时搜索) 完全的实时搜索:只要数据库一变动,马上要更新索引,writer.commit来操作 近实时搜索:当用户修改了信息之后,先把索引保存到内存中,然后在一个统一的时间对内存中的所有的索引进行提交操作。reopen,NRTManager(near-real-time) ...原创 2012-12-21 11:35:13 · 110 阅读 · 0 评论 -
二十五、solr与tomcat的整合
1、solr是全文搜索服务器,专门用户管理索引的。 2、下载solr-->Lucene3.5.0(solr3.5.0)。 3、将solr中的example中的solr拷贝到要作为服务器的位置 放入: 其中data文件夹中的东西可以全部删除。 4、将相应的solr的web程序也拷贝出来 解压后放入:5、修改solr-->hom...原创 2012-12-25 13:52:52 · 65 阅读 · 0 评论 -
二十六、solr的基本使用
public class Message { private String id; private String title; private String[] content; public Message() { super(); } public Me...原创 2012-12-26 10:26:16 · 69 阅读 · 0 评论 -
十五、实现简单同义词分词器
public interface SamewordContext { public String[] getSamewords(String name);}public class MySameTokenFilter extends TokenFilter { private CharTermAttribute ct...原创 2012-12-19 11:41:06 · 192 阅读 · 0 评论 -
十四、中文分词器
中文分词器: Paoding:庖丁解牛分词器。已经没有更新了mmseg:使用搜狗的词库()1、导入包(有两个包:1、带dic,2、不带dic)如果使用不带dic的,得自己指定词库位置2、创建的时候使用MMSegAnalyzer分词器 Analyzer a = new MMSegAnalyzer(new File("D:\\tools\\javaT...原创 2012-11-28 13:49:45 · 59 阅读 · 0 评论 -
十三、自定义Stop分词器
import java.io.Reader;import java.util.Set;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.LetterTokenizer;import org.apache.lucene.analysis.LowerCaseFilte...原创 2012-11-28 13:42:03 · 120 阅读 · 0 评论 -
二、lucene索引_创建_域选项
Field.Store.YES或者NO(存储域选项)YES:将会存储域值,原始字符串的值会保存在索引中,以此可以进行相应的恢复操作,对于主键,标题可以是这种方式存储NO:不会存储域值,通常与Index.ANAYLIZED合起来使用,索引一些如文章正文等不需要恢复的文档,此时内容无法完全还原(doc.get)Field.Index(索引选项...原创 2012-11-19 16:42:47 · 70 阅读 · 0 评论 -
三、索引建立步骤
索引建立步骤1、创建DirectoryDirectory directory = FSDirectory.open(new File("D:/test/index01")); 2、创建WriterIndexWriter writer = new IndexWriter(directory, new IndexWriterConfig(...原创 2012-11-19 17:26:51 · 210 阅读 · 0 评论 -
四、加权操作和对日期和数字进行索引
//存储数字 doc.add(new NumericField("attach", Field.Store.YES, true).setIntValue(attachs[i])); //存储日期 doc.add(new ...原创 2012-11-20 16:13:31 · 89 阅读 · 0 评论 -
五、IndexReader和IndexWriter的生命周期
对于IndexReader而言,反复使用IndexReader.open打开会有很大的开销,所以一般在整个程序的生命周期中只会打开一个IndexReader,通过这个IndexReader来创建不同的IndexSearcher,如果使用单例模式,可能出现的问题有:1、当使用Writer修改了索引之后不会更新信息,所以需要使用IndexReader.openIfChange方法操作...原创 2012-11-20 17:17:12 · 156 阅读 · 0 评论 -
六、常用的Directory
FSDDirectory.open会根据当前的运行环境打开一个最合理的基于File的Directorynew RAMDirectory会从内存中打开directory,好处是速度快,缺点是无法持久化原创 2012-11-20 17:19:22 · 81 阅读 · 0 评论 -
七、搜索的简单实现(TermQuery)
TermQuery只能精确匹配字符串(包括分词后的字符串,不分词的就需要全部匹配),不能用于数字的匹配。 1、创建IndexReader,创建IndexSearcher public IndexSearcher getSearcher(Directory directory) { try { if(read...原创 2012-11-26 17:12:29 · 105 阅读 · 0 评论 -
八、其他搜索Query
TermRangeQuery:字母范围搜索,不支持数字范围,比较规则:先从第一个字母开始比较,如果第一个字符在查询范围内且不等于开始范围的第一个字母,例如查询范围"jz"--"za",被查询的是lisi,那么就直接匹配了,如果被查询的是jack,由于一个字母相等了,就比较第二个字母,依次类推。 public void searchByTermRange(...原创 2012-11-27 10:30:16 · 93 阅读 · 0 评论 -
九、Queryparser
Mike 默认域包含mikeMike johnMike OR john 默认域包含mike或者john+mike +address:zhaotongMike AND address:zhaotong 默认域即使mike并且address是zhaotongid :2 Id域...原创 2012-11-27 17:24:05 · 126 阅读 · 0 评论 -
十、分页搜索
分页查询有两种实现方式: 1、再查询 public void searchPage(String query, int pageIndex, int pageSize) { try { Directory dir = FileIndexUtils.getDirectory(); IndexS...原创 2012-11-27 17:30:21 · 82 阅读 · 0 评论 -
十一、分词器的核心类
Analyzer:SimpleAnalyzer、StopAnalyzer、WhitespaceAnalyzer、StandardAnalyzerpublic static void displayToken(String str,Analyzer a) { try { TokenStream strea...原创 2012-11-28 13:12:46 · 79 阅读 · 0 评论 -
十二、Attribute
Attribute: TokenStream stream = a.tokenStream("content",new StringReader(str)); //位置增量的属性,存储语汇单元之间的距离 PositionIncrementAttribute pia = st...原创 2012-11-28 13:20:05 · 84 阅读 · 0 评论 -
二十七、Luence在项目中运用
public class LuceneContext { private static LuceneContext instance; private static final String INDEX_PATH = "d:/lucene/test"; private static IndexWriter writer; priv...原创 2012-12-26 15:03:47 · 88 阅读 · 0 评论