Author: mickw
Date: 2006-04-10 15:26:12 +0200 (Mon, 10 Apr 2006)
New Revision: 2751
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
Log:
SEARCH-457
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/command/AbstractSearchCommand.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -383,6 +383,9 @@
public Query getQuery() {
return query;
}
+ public TokenEvaluatorFactory
getTokenEvaluatorFactory(){
+ return
context.getRunningQuery().getTokenEvaluatorFactory();
+ }
},
context);
transformer.setContext(qtCxt);
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/command/StockSearchCommand.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -6,10 +6,13 @@
package no.schibstedsok.front.searchportal.command;
import java.util.Map;
+import
no.schibstedsok.front.searchportal.query.transform.SynonymQueryTransformer;
import no.schibstedsok.front.searchportal.result.BasicSearchResult;
import no.schibstedsok.front.searchportal.result.BasicSearchResultItem;
import no.schibstedsok.front.searchportal.result.SearchResult;
+import no.schibstedsok.front.searchportal.result.SearchResultItem;
+import org.apache.log4j.Logger;
/**
*
@@ -17,14 +20,38 @@
*/
public final class StockSearchCommand extends AbstractSearchCommand {
+ private static final Logger LOG =
Logger.getLogger(StockSearchCommand.class);
+
public StockSearchCommand(final Context cxt, final Map parameters) {
super(cxt, parameters);
}
public SearchResult execute() {
- SearchResult result = new BasicSearchResult(this);
- result.addResult(new BasicSearchResultItem());
- result.setHitCount(1);
+
+ final SearchResult result = new BasicSearchResult(this);
+ final String q = getTransformedQuery();
+ LOG.info("transformed query is " + q);
+
+ // for now we are only interested in complete matches. and the
SynonymQT only deals with stock-tickers.
+ if( SynonymQueryTransformer.isSynonym( q )){
+
+ final SearchResultItem item = new BasicSearchResultItem();
+
+
+ final String tickerCode = SynonymQueryTransformer.isTicker(q)
+ ? q
+ : SynonymQueryTransformer.getSynonym(q);
+ final String tickerName =
SynonymQueryTransformer.isTickersFullname(q)
+ ? q
+ : SynonymQueryTransformer.getSynonym(q);
+
+ item.addField("tickerCode", tickerCode);
+ item.addField("tickerName", tickerName);
+
+ result.addResult(item);
+ result.setHitCount(1);
+ }
return result;
}
+
}
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/parser/AbstractClause.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -116,7 +116,7 @@
if (token.evaluate(predicate2evaluatorFactory)) {
final TokenEvaluator evaluator =
predicate2evaluatorFactory.getEvaluator(token);
- if (evaluator.isQueryDependant()) {
+ if (evaluator.isQueryDependant(token)) {
possiblePredicates.add(token);
LOG.debug(DEBUG_FOUND_PREDICATE_PREFIX + currTerm +
DEBUG_FOUND_PREDICATE_POSSIBLE + token);
} else {
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/run/RunningQueryImpl.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -183,18 +183,18 @@
final SearchConfiguration sc = searchConfiguration;
final SearchCommand.Context searchCmdCxt = ContextWrapper.wrap(
SearchCommand.Context.class,
- context,
- new BaseContext() {
- public SearchConfiguration
getSearchConfiguration() {
- return sc;
- }
- public RunningQuery getRunningQuery() {
- return RunningQueryImpl.this;
- }
- public Query getQuery() {
- return queryObj;
- }
+ context,
+ new BaseContext() {
+ public SearchConfiguration
getSearchConfiguration() {
+ return sc;
}
+ public RunningQuery getRunningQuery() {
+ return RunningQueryImpl.this;
+ }
+ public Query getQuery() {
+ return queryObj;
+ }
+ }
);
final AnalysisRule rule =
rules.getRule(searchConfiguration.getRule());
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/AlwaysTrueTokenEvaluator.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -28,7 +28,7 @@
return true;
}
- public boolean isQueryDependant() {
+ public boolean isQueryDependant(TokenPredicate predicate) {
return false;
}
}
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/JepTokenEvaluator.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -75,7 +75,7 @@
return term != null || result != null;
}
- public boolean isQueryDependant() {
+ public boolean isQueryDependant(TokenPredicate predicate) {
return true;
}
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/RegExpTokenEvaluator.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -83,7 +83,7 @@
return false;
}
- public boolean isQueryDependant() {
+ public boolean isQueryDependant(TokenPredicate predicate) {
return queryDependant;
}
}
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluator.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -23,5 +23,5 @@
*/
boolean evaluateToken(String token, String term, String query);
- boolean isQueryDependant();
+ boolean isQueryDependant(TokenPredicate predicate);
}
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenEvaluatorFactoryImpl.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -31,7 +31,7 @@
private static final TokenEvaluator ALWAYS_TRUE_EVALUATOR = new
AlwaysTrueTokenEvaluator();
- private volatile TokenEvaluator fastEvaluator;
+ private TokenEvaluator fastEvaluator;
private final JepTokenEvaluator jedEvaluator;
private static final Log LOG =
LogFactory.getLog(TokenEvaluatorFactoryImpl.class);
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/TokenPredicate.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -98,7 +98,7 @@
// The types of TokenPredicates that exist
public enum Type { GENERIC, FAST, REGEX, JEP }
- /** Some WIERD-ARSE behavour to enum.
+ /**
* Because the enum declarations must come first and they are static,
* their constructor when referencing other static members are
referencing them
* before they themselves have been statically initialised.
@@ -107,10 +107,13 @@
* By wrapping it inside an inner class because all static initialisors of
the inner class are run first
* it ensures FAST_TOKENS will not be null.
**/
- private static final class Sets{
+ private static final class Static{
public static final Set<TokenPredicate> MAGIC_TOKENS = new
HashSet<TokenPredicate>();
public static final Set<TokenPredicate> TRIGGER_TOKENS = new
HashSet<TokenPredicate>();
public static final Set<TokenPredicate> FAST_TOKENS = new
HashSet<TokenPredicate>();
+
+ public static final String ERR_FAST_TYPES_MUST_SPECIFY_LISTNAME =
"Illegal constructor used for Type.FAST";
+ public static final String ERR_FAST_TYPES_ONLY_CONSTRUCTOR =
"Constructor used only appropriate for Type.FAST";
}
// instance fields
@@ -133,14 +136,19 @@
fastListName = null;
this.type = type;
- if( type == Type.REGEX ){
+ switch(type){
+ case REGEX:
+ if( name().endsWith("_MAGIC")){
+ Static.MAGIC_TOKENS.add(this);
- if( name().endsWith("_MAGIC")){
- Sets.MAGIC_TOKENS.add(this);
-
- }else if( name().endsWith("_TRIGGER")){
- Sets.TRIGGER_TOKENS.add(this);
- }
+ }else if( name().endsWith("_TRIGGER")){
+ Static.TRIGGER_TOKENS.add(this);
+ }
+ break;
+ case FAST:
+ throw new
IllegalArgumentException(Static.ERR_FAST_TYPES_MUST_SPECIFY_LISTNAME);
+ default:
+ break;
}
}
@@ -155,8 +163,12 @@
TokenPredicate(final Type type, final String fastListName) {
this.fastListName = fastListName;
this.type = type;
- if( type == Type.FAST ){
- Sets.FAST_TOKENS.add(this);
+ switch(type){
+ case FAST:
+ Static.FAST_TOKENS.add(this);
+ break;
+ default:
+ throw new
IllegalArgumentException(Static.ERR_FAST_TYPES_ONLY_CONSTRUCTOR);
}
}
@@ -164,10 +176,15 @@
return type;
}
+ String getFastListName(){
+ return fastListName;
+ }
+
/** Public method to find the correct FAST TokenPredicate given the
Token's string.
*/
public static TokenPredicate valueFor(final String fastListName) {
- for(TokenPredicate tp : Sets.FAST_TOKENS){
+
+ for(TokenPredicate tp : Static.FAST_TOKENS){
if( fastListName.equals(tp.fastListName) ){
return tp;
}
@@ -184,19 +201,19 @@
/** Utility method to use all FastTokenPredicates in existance.
*/
public static Set<TokenPredicate> getFastTokenPredicates() {
- return Collections.unmodifiableSet(Sets.FAST_TOKENS);
+ return Collections.unmodifiableSet(Static.FAST_TOKENS);
}
/** Utility method to use all MagicTokenPredicates in existance.
*/
public static Set<TokenPredicate> getMagicTokenPredicates() {
- return Collections.unmodifiableSet(Sets.MAGIC_TOKENS);
+ return Collections.unmodifiableSet(Static.MAGIC_TOKENS);
}
/** Utility method to use all TriggerTokenPredicates in existance.
*/
public static Set<TokenPredicate> getTriggerTokenPredicates() {
- return Collections.unmodifiableSet(Sets.TRIGGER_TOKENS);
+ return Collections.unmodifiableSet(Static.TRIGGER_TOKENS);
}
/**
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/token/VeryFastTokenEvaluator.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -30,15 +30,17 @@
* @version $Revision$, $Author$, $Date$
*/
public final class VeryFastTokenEvaluator implements TokenEvaluator,
ReportingTokenEvaluator {
- private static final Logger LOG =
Logger.getLogger(VeryFastTokenEvaluator.class);
- private final Map<String, List<TokenMatch>> analysisResult = new
HashMap<String,List<TokenMatch>>();
+ private static final Logger LOG =
Logger.getLogger(VeryFastTokenEvaluator.class);
+
private static final String REAL_TOKEN_PREFIX = "FastQT_";
private static final String REAL_TOKEN_SUFFIX = "QM";
- private final static String CGI_PATH =
"/cgi-bin/xsearch?sources=alone&qtpipeline=lookupword&query=";
+ private static final String EXACT_PREFIX = "exact_";
+ private static final String CGI_PATH =
"/cgi-bin/xsearch?sources=alone&qtpipeline=lookupword&query=";
private static final String ERR_FAILED_TO_ENCODE = "Failed to encode query
string: ";
private final HTTPClient httpClient;
+ private final Map<String, List<TokenMatch>> analysisResult = new
HashMap<String,List<TokenMatch>>();
/**
@@ -114,20 +116,14 @@
return;
}
- String token = null;
+ String url = null;
try {
- token = URLEncoder.encode(query.replaceAll("\"", ""), "utf-8");
- } catch (UnsupportedEncodingException ignore) {
- LOG.warn(ERR_FAILED_TO_ENCODE + query);
- }
+ final String token = URLEncoder.encode(query.replaceAll("\"", ""),
"utf-8");
- final String url = CGI_PATH + token;
+ url = CGI_PATH + token;
- try {
-
final Document doc = httpClient.getXmlDocument("token_evaluator",
url);
-
NodeList l = doc.getElementsByTagName("QUERYTRANSFORMS");
final Element e = (Element) l.item(0);
@@ -148,9 +144,12 @@
final String key = name.substring(name.indexOf('_') + 1,
name.indexOf("QM"));
- addMatch(REAL_TOKEN_PREFIX + "exact_" + key +
REAL_TOKEN_SUFFIX, match, query);
+ addMatch(REAL_TOKEN_PREFIX + EXACT_PREFIX + key +
REAL_TOKEN_SUFFIX, match, query);
}
}
+
+ } catch (UnsupportedEncodingException ignore) {
+ LOG.warn(ERR_FAILED_TO_ENCODE + query);
} catch (IOException e1) {
LOG.error("Analysis failed " + url, e1);
} catch (SAXException e1) {
@@ -158,8 +157,8 @@
}
}
- public boolean isQueryDependant() {
- return false;
+ public boolean isQueryDependant(TokenPredicate predicate) {
+ return predicate.getFastListName().startsWith(EXACT_PREFIX);
}
private void addMatch(final String name, final String match, final String
query) {
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/PrefixRemoverTransformer.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -49,6 +49,7 @@
private Set<TokenPredicate> insidePrefixes = new HashSet<TokenPredicate>();
private StringBuilder prefixBuilder = new StringBuilder();
private List<LeafClause> leafList = new ArrayList<LeafClause>();
+ private RegExpEvaluatorFactory regExpFactory = null;
protected void visitImpl(final OperationClause clause) {
clause.getFirstClause().accept(this);
@@ -86,11 +87,7 @@
}
for(TokenPredicate predicate : insidePrefixes){
- final RegExpEvaluatorFactory.Context cxt =
ContextWrapper.wrap(
- RegExpEvaluatorFactory.Context.class,
getContext());
- final RegExpEvaluatorFactory factory =
RegExpEvaluatorFactory.valueOf(cxt);
-
- if( factory.getEvaluator(predicate).evaluateToken(null,
prefixBuilder.toString(), null, true) ){
+ if(
regExpFactory.getEvaluator(predicate).evaluateToken(null,
prefixBuilder.toString(), null, true) ){
for(LeafClause c : leafList){
getContext().getTransformedTerms().put(c, BLANK);
}
@@ -145,4 +142,14 @@
return retValue;
}
+
+ public void setContext(final QueryTransformer.Context cxt) {
+
+ super.setContext(cxt);
+
+ final RegExpEvaluatorFactory.Context regExpEvalFactory =
ContextWrapper.wrap(
+ RegExpEvaluatorFactory.Context.class, cxt);
+
+ regExpFactory = RegExpEvaluatorFactory.valueOf(regExpEvalFactory);
+ }
}
\ No newline at end of file
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/QueryTransformer.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -10,6 +10,7 @@
import no.schibstedsok.front.searchportal.query.Clause;
import no.schibstedsok.front.searchportal.query.QueryContext;
import no.schibstedsok.front.searchportal.query.Visitor;
+import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
import no.schibstedsok.front.searchportal.site.SiteContext;
@@ -32,6 +33,10 @@
*
**/
Map<Clause,String> getTransformedTerms();
+
+ /** For evaluation acitions on individual (or the whole query) terms.
+ **/
+ TokenEvaluatorFactory getTokenEvaluatorFactory();
}
void setContext(final Context cxt);
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformer.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -9,6 +9,7 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -21,10 +22,12 @@
import no.schibstedsok.front.searchportal.query.DefaultOperatorClause;
import no.schibstedsok.front.searchportal.query.LeafClause;
+import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
import no.schibstedsok.front.searchportal.query.token.TokenPredicate;
+import no.schibstedsok.front.searchportal.query.token.VeryFastTokenEvaluator;
import org.apache.log4j.Logger;
-/**
+/** XXX This will get largely rewritten when alternation rotation comes into
play.
*
* @author maek
*/
@@ -61,11 +64,17 @@
REVERSE_SYNONYMS = Collections.unmodifiableMap(reverseSynonyms);
}
}
-
+
+ private static final Collection<TokenPredicate> DEFAULT_PREFIXES =
Collections.unmodifiableCollection(
+ Arrays.asList(
+ TokenPredicate.STOCKMARKETFIRMS,
+ TokenPredicate.STOCKMARKETTICKERS
+ ));
+
/** Synonym expansion are only performed for clauses matching the
predicates
* contained in predicateNames */
private Collection<String> predicateNames = new ArrayList<String>();
- private Collection<TokenPredicate> predicates = null;
+ private Collection<TokenPredicate> customPredicates;
private List<LeafClause> leafs = new ArrayList<LeafClause>();
private Set<TokenPredicate> matchingPredicates = new
HashSet<TokenPredicate>();
@@ -73,27 +82,34 @@
private StringBuilder builder = new StringBuilder();
- private boolean fromDefault = false;
-
- public void addPredicateName(final String name) {
+ void addPredicateName(final String name) {
predicateNames.add(name);
}
protected void visitImpl(final DefaultOperatorClause clause) {
+
+ LOG.trace("visitImpl(" + clause + ")");
+
for (final TokenPredicate p : getPredicates()) {
if (clause.getKnownPredicates().contains(p)
- || clause.getPossiblePredicates().contains(p)) {
+ || clause.getPossiblePredicates().contains(p)) {
+
+ LOG.debug("adding to matchingPredicates " + p);
matchingPredicates.add(p);
}
}
clause.getFirstClause().accept(this);
clause.getSecondClause().accept(this);
+
}
protected void visitImpl(final LeafClause clause) {
- if (! matchingPredicates.isEmpty() && !expanded.contains(clause)) {
+
+ LOG.trace("visitImpl(" + clause + ")");
+
+ if (!matchingPredicates.isEmpty() && !expanded.contains(clause)) {
for (final TokenPredicate p : matchingPredicates) {
if (matchingPredicates.size() > 0) {
@@ -101,35 +117,49 @@
}
if (isSynonym(builder.toString() + clause.getTerm())) {
+
+ LOG.debug("adding to builder " + clause.getTerm());
builder.append(clause.getTerm());
leafs.add(clause);
} else {
- if (!leafs.isEmpty()) {
- expandSynonym(leafs, getSynonym(builder.toString()));
- expanded.addAll(leafs);
- leafs.clear();
- matchingPredicates.clear();
- builder.setLength(0);
- }
+// if (!leafs.isEmpty()) {
+//
+// expandSynonym(leafs, getSynonym(builder.toString()));
+// expanded.addAll(leafs);
+// leafs.clear();
+// matchingPredicates.clear();
+// builder.setLength(0);
+// }
}
}
}
- if (clause == getContext().getQuery().getFirstLeafClause()) {
- for (TokenPredicate predicate : getPredicates()) {
- if (clause.getPossiblePredicates().contains(predicate)
- || clause.getKnownPredicates().contains(predicate)) {
- if
(isSynonym(getContext().getTransformedTerms().get(clause))) {
- expandSynonym(clause,
getSynonym(getContext().getTransformedTerms().get(clause)));
- expanded.add(clause);
- return;
- }
+ for (TokenPredicate predicate : getPredicates()) {
+
+ boolean applicable =
clause.getKnownPredicates().contains(predicate);
+ if( !applicable &&
clause.getPossiblePredicates().contains(predicate) ){
+ // possible predicates depend on placement of terms within the
query.
+ // this state can't be assigned to the terms as they are
immutable and
+ // re-used across multiple queries at any given time.
+ applicable |=
predicate.evaluate(getContext().getTokenEvaluatorFactory());
+ }
+
+ if (applicable) {
+
+ if (isSynonym(getContext().getTransformedTerms().get(clause)))
{
+
+ LOG.debug("expanding because of " + predicate);
+ expandSynonym(clause,
getSynonym(getContext().getTransformedTerms().get(clause)));
+ expanded.add(clause);
+ return;
}
}
}
}
private void expandSynonym(final List<LeafClause> replace, String synonym)
{
+
+ LOG.trace("expandSynonym(" + replace + ", " + synonym + ")");
final LeafClause first = replace.get(0);
final LeafClause last = replace.get(replace.size() - 1);
@@ -142,29 +172,48 @@
}
private void expandSynonym(final LeafClause replace, String synonym) {
+
+ LOG.trace("expandSynonym(" + replace + ", " + synonym + ")");
final String originalTerm =
getContext().getTransformedTerms().get(replace);
getContext().getTransformedTerms().put(replace, "(" + originalTerm + "
" + synonym + ")");
}
private Collection<TokenPredicate> getPredicates() {
+
synchronized (this) {
- if (predicates == null) {
- predicates = new ArrayList<TokenPredicate>();
- for (final String predicateName : predicateNames) {
- predicates.add(TokenPredicate.valueOf(predicateName));
+ if (customPredicates == null && predicateNames != null &&
predicateNames.size() > 0) {
+ final Collection<TokenPredicate> cp = new
ArrayList<TokenPredicate>();
+ for (String tp : predicateNames) {
+ cp.add(TokenPredicate.valueOf(tp));
}
+ customPredicates = Collections.unmodifiableCollection(cp);
}
}
- return predicates;
+ return predicateNames != null && predicateNames.size() > 0
+ ? customPredicates
+ : DEFAULT_PREFIXES;
}
-
- private boolean isSynonym(String string) {
+
+ public static boolean isTicker(final String string){
+
final String s = string.toLowerCase();
+ return SYNONYMS.containsKey(s);
+ }
+
+ public static boolean isTickersFullname(final String string){
+
+ final String s = string.toLowerCase();
+ return REVERSE_SYNONYMS.containsKey(s);
+ }
+
+ public static boolean isSynonym(final String string) {
+
+ final String s = string.toLowerCase();
return SYNONYMS.containsKey(s) || REVERSE_SYNONYMS.containsKey(s);
}
- private String getSynonym(final String string) {
+ public static String getSynonym(final String string) {
final String s = string.toLowerCase();
return SYNONYMS.containsKey(s)
Modified:
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
===================================================================
---
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/java/no/schibstedsok/front/searchportal/util/QueryStringHelper.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -54,7 +54,7 @@
} catch (UnsupportedEncodingException e) {
/* IGNORED */
}
- System.out.println("incoming(" + req.getParameter("q") + ") outgoing("
+ reqValue + ")");
+ //System.out.println("incoming(" + req.getParameter("q") + ")
outgoing(" + reqValue + ")");
return reqValue;
}
}
Modified:
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
===================================================================
---
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/test/java/no/schibstedsok/front/searchportal/query/parser/TestVisitor.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -8,6 +8,7 @@
import java.util.Properties;
import javax.xml.parsers.DocumentBuilder;
import junit.framework.TestCase;
+import
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryTestContext;
import no.schibstedsok.front.searchportal.query.AndNotClause;
import no.schibstedsok.front.searchportal.query.Clause;
import no.schibstedsok.front.searchportal.query.DefaultOperatorClause;
@@ -206,34 +207,9 @@
LOG.info("Starting testBasicQueryParser with input: " + queryInput);
- final TokenEvaluatorFactory tokenEvaluatorFactory = new
TokenEvaluatorFactoryImpl(
- new TokenEvaluatorFactoryImpl.Context() {
- public String getQueryString() {
- return queryInput;
- }
+ final TokenEvaluatorFactory tokenEvaluatorFactory
+ = new TokenEvaluatorFactoryImpl(new
TokenEvaluatorFactoryTestContext(queryInput));
- public Properties getApplicationProperties() {
- return
FileResourcesSearchTabsCreatorTest.valueOf(Site.DEFAULT).getProperties();
- }
-
- public PropertiesLoader newPropertiesLoader(final String
resource, final Properties properties) {
- return FileResourceLoader.newPropertiesLoader(this,
resource, properties);
- }
-
- public XStreamLoader newXStreamLoader(final String
resource, final XStream xstream) {
- return FileResourceLoader.newXStreamLoader(this,
resource, xstream);
- }
-
- public DocumentLoader newDocumentLoader(final String
resource, final DocumentBuilder builder) {
- return FileResourceLoader.newDocumentLoader(this,
resource, builder);
- }
-
- public Site getSite() {
- return Site.DEFAULT;
- }
-
- });
-
final QueryParser parser = new QueryParserImpl(new
AbstractQueryParserContext() {
public TokenEvaluatorFactory getTokenEvaluatorFactory() {
return tokenEvaluatorFactory;
Modified:
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
===================================================================
---
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/SynonymQueryTransformerTest.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -10,12 +10,18 @@
package no.schibstedsok.front.searchportal.query.transform;
import com.thoughtworks.xstream.XStream;
+
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+
import javax.xml.parsers.DocumentBuilder;
+
import junit.framework.TestCase;
+import no.schibstedsok.common.ioc.BaseContext;
+import no.schibstedsok.common.ioc.ContextWrapper;
+
import
no.schibstedsok.front.searchportal.configuration.FileResourcesSearchTabsCreatorTest;
import no.schibstedsok.front.searchportal.configuration.loader.DocumentLoader;
import
no.schibstedsok.front.searchportal.configuration.loader.FileResourceLoader;
@@ -37,144 +43,129 @@
import no.schibstedsok.front.searchportal.query.parser.ParseException;
import no.schibstedsok.front.searchportal.query.parser.QueryParser;
import no.schibstedsok.front.searchportal.query.parser.QueryParserImpl;
+import
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryTestContext;
import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
import
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryImpl;
+import no.schibstedsok.front.searchportal.query.token.TokenPredicate;
import no.schibstedsok.front.searchportal.site.Site;
+
import org.apache.log4j.Logger;
/**
*
* @author maek
*/
-public class SynonymQueryTransformerTest extends TestCase {
+public final class SynonymQueryTransformerTest extends
AbstractTransformerTestCase {
private static final Logger LOG =
Logger.getLogger(SynonymQueryTransformerTest.class);
public SynonymQueryTransformerTest(final String testName) {
super(testName);
+
Logger.getLogger(SynonymQueryTransformer.class).setLevel(org.apache.log4j.Level.TRACE);
+ LOG.setLevel(org.apache.log4j.Level.TRACE);
}
-// public void testOneWordExact() throws ParseException {
-// final Query query = parseQuery("sch");
-// final Map trans = applyTransformer(new SynonymQueryTransformer(),
query, "EXACT_STOCKMARKETTICKERS");
-// final QueryBuilder builder = new QueryBuilder(query, trans);
-//
-// assertEquals("(sch schibsted)", builder.getQueryString());
-// }
+ public void testOneWordExact() throws ParseException {
-// public void testOneWord() throws ParseException {
-// final Query query = parseQuery("sch");
-// final Map trans = applyTransformer(new SynonymQueryTransformer(),
query, "STOCKMARKETTICKERS");
-// final QueryBuilder builder = new QueryBuilder(query, trans);
-//
-// assertEquals("(sch schibsted)", builder.getQueryString());
-// }
+ final String queryString = "sch";
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
-// public void testTwoWords() throws ParseException {
-// final Query query = parseQuery("oslo sch schibsted");
-// final Map trans = applyTransformer(new SynonymQueryTransformer(),
query, "STOCKMARKETTICKERS");
-// final QueryBuilder builder = new QueryBuilder(query, trans);
-//
-// assertEquals("oslo (sch schibsted) schibsted",
builder.getQueryString());
-// }
+ final Query query = parseQuery(tef);
+ final Map<Clause,String> trans = applyTransformer(new
SynonymQueryTransformer(), query,
+ TokenPredicate.EXACT_STOCKMARKETTICKERS.name(), tefCxt, tef);
+ final QueryBuilder builder = new QueryBuilder(query, trans);
+
+ final String result = builder.getQueryString();
+ LOG.debug("testOneWordExact builder gave " + result);
+ assertEquals("(sch schibsted)", result);
+ }
+
+ public void testOneWord() throws ParseException {
+
+ final String queryString = "sch";
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map<Clause,String> trans = applyTransformer(new
SynonymQueryTransformer(), query,
+ TokenPredicate.STOCKMARKETTICKERS.name(), tefCxt, tef);
+
+ final QueryBuilder builder = new QueryBuilder(query, trans);
+
+ final String result = builder.getQueryString();
+ LOG.debug("testOneWord builder gave " + result);
+ assertEquals("(sch schibsted)", result);
+ }
+
+ public void testTwoWords() throws ParseException {
+
+ final String queryString = "oslo sch schibsted";
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map<Clause,String> trans = applyTransformer(new
SynonymQueryTransformer(), query,
+ TokenPredicate.STOCKMARKETTICKERS.name(), tefCxt, tef);
+
+ final QueryBuilder builder = new QueryBuilder(query, trans);
+
+
+ final String result = builder.getQueryString();
+ LOG.debug("testTwoWords builder gave " + result);
+ assertEquals("(oslo oslo areal) (sch schibsted) schibsted", result);
+ }
+
public void testTwoWordsExact() throws ParseException {
+
// Not Exact match. Don't do expansion.
- final Query query = parseQuery("oslo sch schibsted");
- final Map trans = applyTransformer(new SynonymQueryTransformer(),
query, "EXACT_STOCKMARKETTICKERS");
+ final String queryString = "oslo sch schibsted";
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map<Clause,String> trans = applyTransformer(new
SynonymQueryTransformer(), query,
+ TokenPredicate.EXACT_STOCKMARKETTICKERS.name(), tefCxt, tef);
+
final QueryBuilder builder = new QueryBuilder(query, trans);
- assertEquals("oslo sch schibsted", builder.getQueryString());
+
+ final String result = builder.getQueryString();
+ LOG.debug("testTwoWordsExact builder gave " + result);
+ assertEquals("oslo sch schibsted", result);
}
// public void testMultiWordOriginalWithOtherTermAtEnd() throws
ParseException {
-// final Query query = parseQuery("schibsted asa oslo");
-// final Map trans = applyTransformer(new SynonymQueryTransformer(),
query, "COMPANYRANK");
+//
+// final String queryString = "schibsted asa oslo";
+// final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+// final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+//
+// final Query query = parseQuery(tef);
+// final Map<Clause,String> trans = applyTransformer(new
SynonymQueryTransformer(), query,
+// TokenPredicate.COMPANYRANK.name(), tefCxt, tef);
+//
// final QueryBuilder builder = new QueryBuilder(query, trans);
//
-// assertEquals("(schibsted asa schasa) oslo",
builder.getQueryString());
+// final String result = builder.getQueryString();
+// LOG.debug("testMultiWordOriginalWithOtherTermAtEnd builder gave " +
result);
+// assertEquals("(schibsted asa schasa) (oslo oslo areal)", result);
// }
- private Map applyTransformer(final SynonymQueryTransformer t, final Query
query, final String predicateName) {
+ private Map<Clause,String> applyTransformer(
+ final SynonymQueryTransformer t,
+ final Query query,
+ final String predicateName,
+ final TokenEvaluatorFactoryImpl.Context tefCxt,
+ final TokenEvaluatorFactory tef) {
- final Map<Clause,String> transformedTerms = new
LinkedHashMap<Clause,String>();
-
- final QueryTransformer.Context qtCxt = new QueryTransformer.Context() {
-
- public Map<Clause,String> getTransformedTerms() {
- return transformedTerms;
- }
- public Site getSite() {
- return Site.DEFAULT;
- }
- public Query getQuery() {
- return query;
- }
- public String getTransformedQuery() {
- return query.getQueryString();
- }
- public PropertiesLoader newPropertiesLoader(final String resource,
final Properties properties) {
- return FileResourceLoader.newPropertiesLoader(this, resource,
properties);
- }
-
- public XStreamLoader newXStreamLoader(final String resource, final
XStream xstream) {
- return FileResourceLoader.newXStreamLoader(this, resource,
xstream);
- }
-
- public DocumentLoader newDocumentLoader(final String resource,
final DocumentBuilder builder) {
- return FileResourceLoader.newDocumentLoader(this, resource,
builder);
- }
- };
-
t.addPredicateName(predicateName);
- t.setContext(qtCxt);
-
- final Visitor mapInitialisor = new MapInitialisor(transformedTerms);
- mapInitialisor.visit(query.getRootClause());
- t.visit(query.getRootClause());
- return transformedTerms;
+ return super.applyTransformer(t,query,tefCxt,tef);
}
+
- private Query parseQuery(final String queryString) throws ParseException {
-
- final TokenEvaluatorFactory tokenEvaluatorFactory = new
TokenEvaluatorFactoryImpl(
- new TokenEvaluatorFactoryImpl.Context() {
- public String getQueryString() {
- return queryString;
- }
-
- public Properties getApplicationProperties() {
- return
FileResourcesSearchTabsCreatorTest.valueOf(Site.DEFAULT).getProperties();
- }
-
- public PropertiesLoader newPropertiesLoader(final String resource,
final Properties properties) {
- return FileResourceLoader.newPropertiesLoader(this, resource,
properties);
- }
-
- public XStreamLoader newXStreamLoader(final String resource, final
XStream xstream) {
- return FileResourceLoader.newXStreamLoader(this, resource,
xstream);
- }
-
- public DocumentLoader newDocumentLoader(final String resource,
final DocumentBuilder builder) {
- return FileResourceLoader.newDocumentLoader(this, resource,
builder);
- }
-
- public Site getSite() {
- return Site.DEFAULT;
- }
- });
-
- final QueryParser parser = new QueryParserImpl(new
AbstractQueryParserContext() {
- public TokenEvaluatorFactory getTokenEvaluatorFactory() {
- return tokenEvaluatorFactory;
- }
- });
-
- final Query query = parser.getQuery();
- return query;
- }
-
public static final class QueryBuilder extends AbstractReflectionVisitor {
private final Query query;
private final Map map;
Modified:
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
===================================================================
---
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
2006-04-10 12:30:21 UTC (rev 2750)
+++
trunk/src/test/java/no/schibstedsok/front/searchportal/query/transform/TermPrefixTransformerTest.java
2006-04-10 13:26:12 UTC (rev 2751)
@@ -9,11 +9,17 @@
package no.schibstedsok.front.searchportal.query.transform;
import com.thoughtworks.xstream.XStream;
+
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
+
import javax.xml.parsers.DocumentBuilder;
+
import junit.framework.TestCase;
+import no.schibstedsok.common.ioc.BaseContext;
+import no.schibstedsok.common.ioc.ContextWrapper;
+
import
no.schibstedsok.front.searchportal.configuration.FileResourcesSearchTabsCreatorTest;
import no.schibstedsok.front.searchportal.configuration.loader.DocumentLoader;
import
no.schibstedsok.front.searchportal.configuration.loader.FileResourceLoader;
@@ -35,16 +41,19 @@
import no.schibstedsok.front.searchportal.query.parser.ParseException;
import no.schibstedsok.front.searchportal.query.parser.QueryParser;
import no.schibstedsok.front.searchportal.query.parser.QueryParserImpl;
+import
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryTestContext;
import no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactory;
import
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryImpl;
+import
no.schibstedsok.front.searchportal.query.token.TokenEvaluatorFactoryImpl;
import no.schibstedsok.front.searchportal.site.Site;
+
import org.apache.log4j.Logger;
/**
*
* @author magnuse
*/
-public class TermPrefixTransformerTest extends TestCase {
+public class TermPrefixTransformerTest extends AbstractTransformerTestCase {
private static final String PREFIX_WORD = "wordprefix";
private static final String PREFIX_INTEGER = "integerprefix";
@@ -64,8 +73,13 @@
}
public void testTwoSameWordsQuery() throws ParseException {
- final Query query = parseQuery(QUERY_WORD + " " + QUERY_WORD);
- final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+ final String queryString = QUERY_WORD + " " + QUERY_WORD;
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map trans = applyTransformer(new TermPrefixTransformer(), query,
tefCxt, tef);
final QueryBuilder builder = new QueryBuilder(query, trans);
assertEquals(PREFIX_WORD + ":" + QUERY_WORD + " " +
@@ -73,8 +87,14 @@
}
public void testTwoWordQuery() throws ParseException {
- final Query query = parseQuery(QUERY_WORD + " " + QUERY_WORD_2);
- final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+ final String queryString = QUERY_WORD + " " + QUERY_WORD_2;
+
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map trans = applyTransformer(new TermPrefixTransformer(), query,
tefCxt, tef);
final QueryBuilder builder = new QueryBuilder(query, trans);
assertEquals(PREFIX_WORD + ":" + QUERY_WORD + " " +
@@ -83,8 +103,13 @@
}
public void testPhoneNumber() throws ParseException {
- final Query query = parseQuery(QUERY_PHONE_NUMBER);
- final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+ final String queryString = QUERY_PHONE_NUMBER;
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map trans = applyTransformer(new TermPrefixTransformer(), query,
tefCxt, tef);
final QueryBuilder builder = new QueryBuilder(query, trans);
assertEquals(PREFIX_INTEGER + ":" + QUERY_PHONE_NUMBER,
@@ -92,16 +117,26 @@
}
public void testPhoneNumberSpaces() throws ParseException {
- final Query query = parseQuery(QUERY_PHONE_NUMBER_SPACES);
- final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+ final String queryString = QUERY_PHONE_NUMBER_SPACES;
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map trans = applyTransformer(new TermPrefixTransformer(), query,
tefCxt, tef);
final QueryBuilder builder = new QueryBuilder(query, trans);
assertEquals(PREFIX_INTEGER + ":" + QUERY_PHONE_NUMBER,
builder.getQueryString());
}
public void testOrgNr() throws ParseException {
- final Query query = parseQuery(QUERY_ORG_NR);
- final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+ final String queryString = QUERY_ORG_NR;
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map trans = applyTransformer(new TermPrefixTransformer(), query,
tefCxt, tef);
final QueryBuilder builder = new QueryBuilder(query, trans);
assertEquals(PREFIX_INTEGER + ":" + QUERY_ORG_NR,
@@ -109,95 +144,31 @@
}
public void testInteger() throws ParseException {
- final Query query = parseQuery(QUERY_INTEGER);
- final Map trans = applyTransformer(new TermPrefixTransformer(), query);
+
+ final String queryString = QUERY_INTEGER;
+ final TokenEvaluatorFactoryImpl.Context tefCxt = new
TokenEvaluatorFactoryTestContext(queryString);
+ final TokenEvaluatorFactory tef = new
TokenEvaluatorFactoryImpl(tefCxt);
+
+ final Query query = parseQuery(tef);
+ final Map trans = applyTransformer(new TermPrefixTransformer(), query,
tefCxt, tef);
final QueryBuilder builder = new QueryBuilder(query, trans);
assertEquals(PREFIX_INTEGER + ":" + QUERY_INTEGER,
builder.getQueryString());
}
+ protected Map<Clause, String> applyTransformer(
+ final TermPrefixTransformer t,
+ final Query query,
+ final TokenEvaluatorFactoryImpl.Context tefCxt,
+ final TokenEvaluatorFactory tef) {
- private Map applyTransformer(final TermPrefixTransformer t, final Query
query) {
-
- final Map<Clause,String> transformedTerms = new
LinkedHashMap<Clause,String>();
-
- final QueryTransformer.Context qtCxt = new QueryTransformer.Context() {
-
- public Map<Clause,String> getTransformedTerms() {
- return transformedTerms;
- }
- public Site getSite() {
- return Site.DEFAULT;
- }
- public Query getQuery() {
- return query;
- }
- public String getTransformedQuery() {
- return query.getQueryString();
- }
- public PropertiesLoader newPropertiesLoader(final String resource,
final Properties properties) {
- return FileResourceLoader.newPropertiesLoader(this, resource,
properties);
- }
-
- public XStreamLoader newXStreamLoader(final String resource, final
XStream xstream) {
- return FileResourceLoader.newXStreamLoader(this, resource,
xstream);
- }
-
- public DocumentLoader newDocumentLoader(final String resource,
final DocumentBuilder builder) {
- return FileResourceLoader.newDocumentLoader(this, resource,
builder);
- }
- };
-
t.setPrefix(PREFIX_WORD);
t.setNumberPrefix(PREFIX_INTEGER);
- t.setContext(qtCxt);
-
- final Visitor mapInitialisor = new MapInitialisor(transformedTerms);
- mapInitialisor.visit(query.getRootClause());
- t.visit(query.getRootClause());
- return transformedTerms;
+ return super.applyTransformer(t, query, tefCxt, tef);
}
- private Query parseQuery(final String queryString) throws ParseException {
- final TokenEvaluatorFactory tokenEvaluatorFactory = new
TokenEvaluatorFactoryImpl(
- new TokenEvaluatorFactoryImpl.Context() {
- public String getQueryString() {
- return queryString;
- }
-
- public Properties getApplicationProperties() {
- return
FileResourcesSearchTabsCreatorTest.valueOf(Site.DEFAULT).getProperties();
- }
-
- public PropertiesLoader newPropertiesLoader(final String resource,
final Properties properties) {
- return FileResourceLoader.newPropertiesLoader(this, resource,
properties);
- }
-
- public XStreamLoader newXStreamLoader(final String resource, final
XStream xstream) {
- return FileResourceLoader.newXStreamLoader(this, resource,
xstream);
- }
-
- public DocumentLoader newDocumentLoader(final String resource,
final DocumentBuilder builder) {
- return FileResourceLoader.newDocumentLoader(this, resource,
builder);
- }
-
- public Site getSite() {
- return Site.DEFAULT;
- }
- });
-
- final QueryParser parser = new QueryParserImpl(new
AbstractQueryParserContext() {
- public TokenEvaluatorFactory getTokenEvaluatorFactory() {
- return tokenEvaluatorFactory;
- }
- });
-
- final Query query = parser.getQuery();
- return query;
- }
-
public static final class QueryBuilder extends AbstractReflectionVisitor {
private final Query query;
private final Map map;
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits