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);其中BooleanClause.Occur.SHOULD這個屬性不是很懂
booleanQuery.add(wQuery, BooleanClause.Occur.SHOULD);
如果是BooleanClause.Occur.MUST則是一定會出現
但沒有去跟其他的Query做個聯集
為了做出正確的查詢結果
我把原本使用BooleanClause.Occur.MUST的Query改成用filter來做
將query出來後的結果透過filter再過濾一次
Filter filter = new QueryWrapperFilter(mustQuery);//再次地過濾查詢結果
目前加入filter後還沒有感覺到效能變差
所以就暫不研究BooleanClause.Occur了!
沒有留言:
張貼留言