📄 multifiledquery.java
字号:
/*
* Created on 2007-5-30
* Last modified on 2007-5-30
* Powered by GamVan.com
*/
package com.yeqiangwei.club.service.search;
import java.util.List;
import java.util.Vector;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
public class MultiFiledQuery extends MultiFieldQueryParser{
public MultiFiledQuery(String[] fields, Analyzer analyzer) {
super(fields, analyzer);
}
public Query getFuzzyQuery(String keys, String[] fields, float[] minSimilarity) throws ParseException{
Vector<BooleanClause> clauses = new Vector<BooleanClause>();
for (int i = 0; i < fields.length; i++) {
clauses.add(new BooleanClause(super.getFuzzyQuery(keys, fields[i], minSimilarity[i]),
BooleanClause.Occur.SHOULD));
}
BooleanQuery query = new BooleanQuery(true);
for (int i = 0; i < clauses.size(); i++) {
query.add((BooleanClause)clauses.elementAt(i));
}
return query;
}
public Query getFuzzyQuery(String keys, String[] fields, BooleanClause.Occur[] flags, float[] minSimilarity) throws ParseException{
Vector<BooleanClause> clauses = new Vector<BooleanClause>();
for (int i = 0; i < fields.length; i++) {
clauses.add(new BooleanClause(super.getFuzzyQuery(keys, fields[i], minSimilarity[i]),flags[i]));
}
BooleanQuery query = new BooleanQuery(true);
for (int i = 0; i < clauses.size(); i++) {
query.add((BooleanClause)clauses.elementAt(i));
}
return query;
}
public static Query parse(List<String> query, List<String> fields,
List<BooleanClause.Occur> flags, List<Float> boosts, Analyzer analyzer) throws ParseException {
if (fields.size()!=flags.size())
throw new IllegalArgumentException("fields.size()!=flags.size()");
BooleanQuery bQuery = new BooleanQuery();
for (int i = 0; i < fields.size(); i++) {
QueryParser qp = new QueryParser(fields.get(i), analyzer);
Query q = qp.parse(query.get(i));
bQuery.add(q, flags.get(i));
if(boosts.get(i)!=null)
q.setBoost(boosts.get(i));
}
return bQuery;
}
public static Query parse(String query, String[] fields,
BooleanClause.Occur[] flags, float[] boosts, Analyzer analyzer) throws ParseException {
if (fields.length != flags.length)
throw new IllegalArgumentException("fields.length != flags.length");
BooleanQuery bQuery = new BooleanQuery();
for (int i = 0; i < fields.length; i++) {
QueryParser qp = new QueryParser(fields[i], analyzer);
Query q = qp.parse(query);
q.setBoost(boosts[i]);
bQuery.add(q, flags[i]);
}
return bQuery;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -