Lucene总结

1.多字段查询
Occur.MUST                  and
Occur.MUST_NOT       not
Occur.SHOULD            or
多个关键字默认关系是或。
2.多索引器
1)建立多个索引:使用不同的索引目录,实例化不同的IndexWriter 
2)建立多索引搜索器: 
Searcher[] searchers = new SEARCHER[2]; 
Searchers[0] = new IndexSearcher(dir1); //搜索索引目录一 
Searchers[1]= new IndexSearcher(dir2);//搜索索引目录二 
Searcher searcher = new MultiSearcher(serarchers); 
3.检索结果评分
  1. Explanation explanation = indexSearcher.explain(query, docID);  
  2. System.out.println(explanation.toString());  

4.lucene优化
(1)setMergeFactor合并因子
决定了一个索引块中包括多少个文档,当硬盘上的索引块达到多少时,将它们合并成一个较大的索引块。当MergeFactor值较大时,生成索引的速度较快。
 IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_36,analyzer);
 LogMergePolicy mergePolicy = new LogByteSizeMergePolicy();
 mergePolicy.setMergeFactor(3);
 conf.setMergePolicy(mergePolicy);

5.各种Query
TermQuery  词条搜索
RangeQuery   范围搜索
Term  beginTime=new  Term("time","2000");
Term  endTime=new Term("time","2050");
RangeQuery  query=new RangeQuery(beginTime,endTime,false);  //不包含边界值

PrefixQuery前缀搜索
Term prel=new Term("name","wor");
PrefixQuery  query=new PrefixQuery(prel);

PhraseQuery 短语搜索
(1)默认坡度为0
PhraseQuery  query=new PhraseQuery();
query.add(new Term("bookname","钢"));
query.add(new Term("bookname","铁"));
//搜索"钢铁",而非"钢"和"铁"
(2)坡度为1
PhraseQuery  query=new PhraseQuery();
query.add(new Term("bookname","钢"));
query.add(new Term("bookname","铁"));
query.setSlop(1);
//搜索"钢铁",或“钢”、"铁"中一字

MultiPhraseQuery多短语搜索

FuzzyQuery 模糊搜索
FuzzyQuery  query=new FuzzyQuery(new Term("content","work"));
FuzzyQuery  query=new FuzzyQuery(Term  term,float minimumSimilarity);
FuzzyQuery  query=new FuzzyQuery(Term term,float minimumSimilarity,int  prefixLength)
其中minimumSimilarity为最小相似度,越小则文档的数量越多。默认为0.5,其值必须小于1.0。prefixLength表示要有多少个前缀字母必须完全匹配。

WildcardQuery 通配符搜索
WildcardQuery  query=new WildcardQuery(new Term("content","?qq*"));
*表示0到多个字符
?表示一个单一的字符

RegexQuery  正则表达式查询
RegexQuery  query=new  RegexQuery(new Term("url",regex));

6.各种Analyzer

lucene分析器使用分词器和过滤器构成一个"管道",分词器tokenizer将文本按照规则切分为一个个可以进入索引的小单位,tokenFilter对切出来的词进行进一步的处理(去掉敏感词、英文大小写转换等)。Tokenstream处理Reader对象的流式文本。

WhitespaceAnalyzer
以空格作为切词标准,不对语汇单元进行其他规范化处理。用于处理英文。
WhitespaceAnalyzer  wsa=new WhitespaceAnalyzer(Version.LUCENE_40);
TokenStream  ts=wsa.tokenStream("field",text);
CharTermAttribute  ch=ts.addAttribute(CharTermAttribute.class);
ts.reset();
while(ts.incrementToken())
{
ch.toString();
}
ts.end();
ts.close();

SimpleAnalyzer 简单分词器
以非字母符来分割文本信息,并将语汇单元统一转换为小写形式,并去掉数字类型的字符。

StopAnalyzer  停顿词分词器
停顿词分析器会去掉一些常有的a,the,an等,可以自定义禁用词。
//自定义停用词
String[]  self_stop_words={"word1","word2"};
CharArraySet  cas=new CharArraySet(Version.LUCENE_40,0,true);
for(int i=0;i<self_stop_words.length;i++)
{
cas.add(self_stop_words[i]);
}
//加入系统默认停用词
Iterator<Object>  itor=StopAnalyzer.ENGLISH_STOP_WORDS_SET.iterator();
while(itor.hasNext())
{
cas.add(itor.next());
}
StopAnalyzer  sa=new StopAnalyzer(Version.LUCENE_40,cas);
TokenStream  ts=sa.tokenStream("field",text);
CharTermAttribute  ch=ts.addAttribute(CharTermAttribute.class);
ts.reset();
while(ts.incrementToken())
{
  ch.toString();
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值