首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Lucene简明笔记

2012-08-21 
Lucene简要笔记一、Lucene 概念以索引文件方式存放在磁盘中二、Lucene操作a)建立索引i.实体类,有主ID,还有其

Lucene简要笔记
一、Lucene 概念
以索引文件方式存放在磁盘中
二、Lucene操作
a)建立索引
i.实体类,有主ID,还有其他字段
ii.建立索引库路径 Directory directory = new FSDirectory.open(”./indexDir”);
iii.建立分词器 Analyzer analyzer = new StandarAnalyzer(Version.LUCENE_30)
iv.将实体类转为Document   doc = new Document();doc.add(new Field(“id”,id,Store.YES, Index.Analyzer))
v.添加 IndexWriter indexWriter  = new IndexWriter(directory,analyzer,MaxFieldLength.LIMITED) ; indexWriter.addDocument(doc)
vi.
b)搜索
i.索引库目录
ii.分词器
iii.把查询字符转为Query对象QueryParser queryParser = new QueryParser(Version.LUCENE_30,”title”, analyzer),在哪个字段中搜索。queryParser.parse(搜索内容)
iv.执行查询,得到 中间结果
indexSearcher indexSearcher = new IndexSearcher(directory);
TopDocs topDocs = indexSearcher.search(query, 10)
topDocs.totalHits;
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
v.处理结果
1.scoreDocs[i].doc;内部编号 indexSearcher.doc(内部编号)
vi.再将Document转为实体
三、优化
a)合并文件optimize().自动合并,默认最小是2,最大是10,setMergeFactor(3)
b)在内存中加载数据:
启动时,加载:New RAMDirectory(fsDir)
结束时,往内存中写:indexWriter.addIndexsNoOptimize(ramDir);
四、分词器:查询与写入需使用同一个分词器---对于中文,引用外加分词器,IKAnalyzer
a)排序
i.默认为,相关度
1.在添加的时候,doc.setBoost(2F)  1F, 0.5F
ii.自定义字段排序,类似于order by
1.Sort = new Sort(“id”, SortField.INT,true)
2.使用indexSearcher.searcher(query, filter, n, sort)
b)高亮
i.作用:突出显示关键词,显示生成一段摘要
ii.配置:
1.摘要大小,默认小100个字
2.显示效果的前后缀,默认<b>
3.API用法:
a)生成并配置一个高亮器
i.Highlighter = new Highligher(new SimpleHTMLFormatter(“<font color=’red’>”,”</font>”), new QueryScorer(query))
b)使用高亮器进行高亮操作
i.text = Highlighter.getBaseFragment(analyzer, fieldname, text)
c)Doc.getField(“content”).setValue(text);
c)过滤:Filter 的实现 类
i.NumberRangleFilter
d)各种方式的查询
i.从使用方式区分:
1.查询字符串 + QueryParser ?query:使用查询的语法
2.直接构建Query对象:构建不同的子类
ii.从效果上看:
1.范围查询
2.关键词查询
a)NumberRangle: id:{   5 TO 10 }
b)TermQuery:条件title:lucene
c)WildcardQuery:通配符 title:lu*n?
d)MathAllDocsQuery:任何 *:*
e)FuzzQuery(new Term(“title”,”luceneX”, 0.7F)):70%  模糊查询title:luceneX~0.9
f)PhraseQuery:短语查询  title:”lucene ? ? 说明”
i.phraseQuery.add(mew Term(“title”,”lucene”,0));
ii.phraseQuery.add(new Term(“title”, “说明”,3));
iii.phraseQuery.setSlop(5)最多不超过5个
g)BooleanQuery:布尔查询 +*.* +ID:[5 TO 10]
i. booleanQuery.add(qury, Occur.NUST)  ....MUST_NOT, SHOULD

五、工具类
a)NumbericUtils
b)DateTools
六、


基于lucene的框架
类似于Hibernate框架,API也一样

热点排行