Hi Eric,

I have implemented this in Zilverline. What I do is the following: subclass QueryParser and override getFieldQuery:

protected Query getFieldQuery(String field, Analyzer analyzer, String queryText) throws ParseException {

// for field that contain 'contents' add boostfactors for other terms specified in BoostFactor
if (defaultField.equals(field)) {
TokenStream source = analyzer.tokenStream(field, new StringReader(queryText));
Vector v = new Vector();
org.apache.lucene.analysis.Token t;
while (true) {
try {
t = source.next();
} catch (IOException e) {
t = null;
}
if (t == null)
break;
v.addElement(t.termText());
log.debug(field + " , " + t.termText());
}
try {
source.close();
} catch (IOException e) { // ignore
}


if (v.size() == 0) {
return null;
}
else {
// create a new composed query
BooleanQuery bq = new BooleanQuery();
// get the static BoostFactors through non static getter
BoostFactor bf = new BoostFactor();
// For all boostfactors create a new PhraseQuery
Iterator iter = bf.getFactors().entrySet().iterator();
while (iter.hasNext()) {
Map.Entry element = (Map.Entry) iter.next();
String thisField = ((String) element.getKey()).toLowerCase();
Float boost = (Float) element.getValue();
PhraseQuery q = new PhraseQuery();
// and add all the terms of the query
for (int i = 0; i < v.size(); i++) {
q.add(new Term(thisField, (String) v.elementAt(i)));
}
// boost the query
q.setBoost(boost.floatValue());
// and add it to the composed query
bq.add(q, false, false);
}
log.debug("Query: " + bq);
return bq;
}
} else {
return super.getFieldQuery(field, analyzer, queryText);
}
}


Read the Boostfactors from an external source. Im using a object with a Hashmap. see Boostfactors @ www.zilverline.org

Cheers,

  Michael Franken

Eric Jain wrote:

Is it possible to expand a query such as

  foo bar

into

  (title:foo^4 OR abstract:foo^2 OR content:foo) AND
  (title:bar^4 OR abstract:bar^2 OR content:bar)

?

I can assign weights to individual fields when indexing, and could use the MultiFieldQueryParser - but it seems this parser can't be configured to use AND as default!

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to