Author: ssmiweve
Date: 2008-11-27 15:09:21 +0100 (Thu, 27 Nov 2008)
New Revision: 6995
Modified:
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractESPFastSearchCommand.java
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/AbstractSearchCommand.java
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/QueryBuilder.java
Log:
-subclass methods were not being called from anonymous class. wrapper methods
added to delegate properly to subclass methods.
-make getReservedWords implementations reused the built collections
-let the reserved words be regular expressions to allow more complex reserved
words
Modified:
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractESPFastSearchCommand.java
===================================================================
---
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractESPFastSearchCommand.java
2008-11-27 11:15:55 UTC (rev 6994)
+++
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractESPFastSearchCommand.java
2008-11-27 14:09:21 UTC (rev 6995)
@@ -55,6 +55,7 @@
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
@@ -123,6 +124,8 @@
}
}
+ private static transient Collection<String> RESERVED_WORDS;
+
// Constructors --------------------------------------------------
/**
@@ -315,11 +318,14 @@
@Override
protected Collection<String> getReservedWords() {
- final Collection<String> words = new
ArrayList<String>(super.getReservedWords());
- for (ReservedWord word : ReservedWord.values()) {
- words.add(word.getWord());
+ if(null == RESERVED_WORDS){
+ final Collection<String> words = new
ArrayList<String>(super.getReservedWords());
+ for (ReservedWord word : ReservedWord.values()) {
+ words.add(word.getWord());
+ }
+ RESERVED_WORDS = Collections.unmodifiableCollection(words);
}
- return words;
+ return RESERVED_WORDS;
}
/** In addition to super.escape() also replaces all ? with whitespace.
Modified:
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/AbstractSearchCommand.java
===================================================================
---
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/AbstractSearchCommand.java
2008-11-27 11:15:55 UTC (rev 6994)
+++
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/AbstractSearchCommand.java
2008-11-27 14:09:21 UTC (rev 6995)
@@ -190,7 +190,7 @@
public Query getQuery() {
// Important that initialiseQuery() has been called
first
- return getSearchCommandsQuery(); // XXX will this end
up in subclass overrides?
+ return getSearchCommandsQuery();
}
public TokenEvaluationEngine getTokenEvaluationEngine() {
@@ -198,11 +198,11 @@
}
public void visitXorClause(final Visitor visitor, final
XorClause clause) {
- AbstractSearchCommand.this.visitXorClause(visitor,
clause);
+ searchCommandsVisitXorClause(visitor, clause);
}
public String getFieldFilter(final LeafClause clause) {
- return
AbstractSearchCommand.this.getFieldFilter(clause);
+ return getSearchCommandsFieldFilter(clause);
}
public String getTransformedTerm(final Clause clause) {
@@ -215,16 +215,16 @@
public Collection<String> getReservedWords() {
- return AbstractSearchCommand.this.getReservedWords();
+ return getSearchCommandsReservedWords();
}
public String escape(final String word) {
- return AbstractSearchCommand.this.escape(word);
+ return searchCommandsEscape(word);
}
public Map<Clause, String> getTransformedTerms() {
- return
AbstractSearchCommand.this.getTransformedTerms();
+ return getSearchCommandsTransformedTerms();
}
},
cxt
@@ -935,6 +935,23 @@
return getQuery();
}
+ /** Wrapper around visitXorClause(). Nothing more than a different method
signature. **/
+ private void searchCommandsVisitXorClause(final Visitor visitor, final
XorClause clause) {
+ visitXorClause(visitor, clause);
+ }
+
+ /** Wrapper around getReservedWords(). Nothing more than a different
method signature. **/
+ private String getSearchCommandsFieldFilter(final LeafClause clause) {
return getFieldFilter(clause); }
+
+ /** Wrapper around getQuery(). Nothing more than a different method
signature. **/
+ private Collection<String> getSearchCommandsReservedWords() { return
getReservedWords(); }
+
+ /** Wrapper around escape(). Nothing more than a different method
signature. **/
+ private String searchCommandsEscape(final String word) { return
escape(word); }
+
+ /** Wrapper around getTransformedTerms(). Nothing more than a different
method signature. **/
+ private Map<Clause, String> getSearchCommandsTransformedTerms() { return
getTransformedTerms(); }
+
/**
*
* @return
Modified:
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
===================================================================
---
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
2008-11-27 11:15:55 UTC (rev 6994)
+++
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/AbstractQueryBuilder.java
2008-11-27 14:09:21 UTC (rev 6995)
@@ -101,14 +101,18 @@
for (String word : getWordsToEscape()) {
// Case-insensitive check against word.
- // Term might already be prefixed by the TermPrefixTransformer.
- if (string.toLowerCase().endsWith(':' + word.toLowerCase()) ||
string.equalsIgnoreCase(word)) {
+ // Term might already be prefixed by a field.
- final Pattern p = Pattern.compile(
- Matcher.quoteReplacement(word),
- Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
+ final String regexp = "(.*:)?" + word;
+ if (string.toLowerCase().matches(regexp)) {
- return p.matcher(word).replaceAll(context.escape(string));
+ final Pattern p = Pattern.compile(word, Pattern.UNICODE_CASE |
Pattern.CASE_INSENSITIVE);
+
+ final String term = string.contains(":") &&
!string.contains("\\:")
+ ? string.substring(string.indexOf(':') + 1)
+ : string;
+
+ return p.matcher(string).replaceAll(context.escape(term));
}
}
Modified:
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/QueryBuilder.java
===================================================================
---
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/QueryBuilder.java
2008-11-27 11:15:55 UTC (rev 6994)
+++
branches/2.18/search-command-control-spi/src/main/java/no/sesat/search/mode/command/querybuilder/QueryBuilder.java
2008-11-27 14:09:21 UTC (rev 6995)
@@ -40,8 +40,10 @@
* @return unescaped transformed term
*/
String getTransformedTerm(Clause clause);
- /** The collection of words that have special meaning/function within
the query string
+ /** The collection of words that have special meaning/function within
the query string.
*
+ * Each is treated as a regular expressions to match complex words if
neccessary.
+ *
* @return collection of reserved words
*/
Collection<String> getReservedWords();
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits