2010年3月10日 星期三

[Lucene]Query&filter

紀錄一下目前查詢所用到的Query

1.MultiFieldQueryParser
適用於查詢多個field
String[] field = {"A","B","C"};
Analyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
MultiFieldQueryParser mfqp = new MultiFieldQueryParser(Version.LUCENE_CURRENT, field, standardAnalyzer);

2.PhraseQuery
適用於查詢多個關鍵詞,但只能查同一個field
PhraseQuery pQuery  = new PhraseQuery();
pQuery.add(new Term("A", keep));
pQuery.add(new Term("A", coding));

3.WildcardQuery
可利用正則表達式的查詢方式
WildcardQuery wQuery = new WildcardQuery(new Term("A", keep+"*"));

4.BooleanQuery
組合查詢,負責串接Query
booleanQuery.add(pQuery, BooleanClause.Occur.SHOULD);
booleanQuery.add(wQuery, BooleanClause.Occur.SHOULD);
其中BooleanClause.Occur.SHOULD這個屬性不是很懂
如果是BooleanClause.Occur.MUST則是一定會出現
但沒有去跟其他的Query做個聯集

為了做出正確的查詢結果
我把原本使用BooleanClause.Occur.MUST的Query改成用filter來做
將query出來後的結果透過filter再過濾一次
Filter filter = new QueryWrapperFilter(mustQuery);//再次地過濾查詢結果

目前加入filter後還沒有感覺到效能變差
所以就暫不研究BooleanClause.Occur了!

沒有留言:

張貼留言