[
http://issues.apache.org/jira/browse/LUCENE-682?page=comments#action_12456294 ]
Yonik Seeley commented on LUCENE-682:
-------------------------------------
Something like this perhaps:
public static String change(String s, String AND, String OR, String NOT) {
int len = s.length();
StringBuilder b = new StringBuilder();
boolean newString=false;
boolean changed=false;
boolean inString=false;
char prev='!';
for (int i=0; i<s.length(); i++) {
char ch = s.charAt(i);
switch (ch) {
case '\\' : b.append(s.charAt(++i)); break;
case '\'' : inString=!inString; break;
case 'A' :
if (!inString
&& !Character.isJavaIdentifierPart(prev)
&& i+2 < s.length()
&& s.charAt(i+1) == 'N'
&& s.charAt(i+2) == 'D'
&& (i+3==s.length() ||
!Character.isJavaIdentifierPart(s.charAt(i+3))))
{
b.append(AND);
changed=true;
i+=2;
}
break;
case 'O' :
if (!inString
&& !Character.isJavaIdentifierPart(prev)
&& i+1 < s.length()
&& s.charAt(i+1) == 'R'
&& (i+2==s.length() ||
!Character.isJavaIdentifierPart(s.charAt(i+2))))
{
b.append(OR);
changed=true;
i+=1;
}
break;
case 'N' :
if (!inString
&& !Character.isJavaIdentifierPart(prev)
&& i+2 < s.length()
&& s.charAt(i+1) == 'O'
&& s.charAt(i+2) == 'T'
&& (i+3==s.length() ||
!Character.isJavaIdentifierPart(s.charAt(i+3))))
{
b.append(NOT);
changed=true;
i+=2;
}
break;
default: break;
}
if (changed) {
newString=true;
changed=false;
} else {
b.append(ch);
prev = ch;
}
}
return newString ? b.toString() : s;
}
> QueryParser with Locale Based Operators (French included)
> ---------------------------------------------------------
>
> Key: LUCENE-682
> URL: http://issues.apache.org/jira/browse/LUCENE-682
> Project: Lucene - Java
> Issue Type: New Feature
> Components: QueryParser
> Reporter: Patrick Turcotte
> Assigned To: Hoss Man
> Priority: Minor
> Attachments: LocalizedQueryParser.patch, LocalizedQueryParser.patch,
> LocalizedQueryParser.zip, LocalizedQueryParserDemo.java,
> LocalizedQueryParserOperatorsMicroBench.java, QueryParser.jj,
> QueryParser.jj.patch, QueryParser.properties, QueryParser_fr.properties,
> TestQueryParserLocaleOperators.java
>
>
> Here is a version of the QueryParser that can "understand" the AND, OR and
> NOT keyword in other languages.
> If activated,
> - "a ET b" should return the same query as "a AND b", namely: "+a +b"
> - "a OU b" should return the same query as "a OR b", namely: "a b"
> - "a SAUF b" should return the same query as "a NOT b", namely: "a -b"
> Here are its main points :
> 1) Patched from revision 454774 of lucene 2.1dev (trunk) (probably could be
> used with other versions)
> 2) The "ant test" target is still successful when the modified QueryParser is
> used
> 3) It doesn't break actual code
> 4) The default behavior is the same as before
> 5) It has to be deliberately activated
> 6) It use ResourceBundle to find the keywords translation
> 7) Comes with FRENCH translation
> 8) Comes with JUnit testCases
> 9) Adds 1 public method to QueryParser
> 10) Expands the TOKEN <TERM>
> 11) Use TOKEN_MGR_DECLS to set some field for the TokenManager
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]