Paul Taylor wrote:
I think this is a common problem, but don't know the correct solution.

Users were doing queries on a numeric field such as qdur:[73 TO 117] and expecting to find all the values within but this fails because lucene treats the numbers as strings and just does alphabetical search. So I now index the field using NumberTools.longToString() so allows equivalent search i.e. qdur:[00000000000021 TO 00000000000039] which works correctly.

Trouble user types query into a free text field and cannot expect user to do the conversion, so I need to convert qdur:[73 TO 117] to qdur:[00000000000021 TO 00000000000039] before doing the lucene search, Im trying to do this with regular expressions but not convinced its safe for all variations, is there a better way (Im using Lucene 2.9)?


Paul

And this is my code:

public class TrackMangler implements QueryMangler{

   private Pattern matchDur;
   private Pattern matchDurrRange;
public TrackMangler()
   {
       matchDur         = Pattern.compile("(dur:)([0-9]+)");
matchDurRange = Pattern.compile("(dur:\\[)([0-9]+)( TO )([0-9]+)(\\])"); }

private String convertDurToOrderable(String query)
   {
       Matcher m =  matchDur.matcher(query);
       StringBuffer sb = new StringBuffer();
       while (m.find()) {
            int duration = Integer.parseInt(m.group(2));
m.appendReplacement(sb, m.group(1) + NumberTools.longToString(duration));
       }
       m.appendTail(sb);
       query =  sb.toString();

m = matchDurRange.matcher(query); sb = new StringBuffer();
       while (m.find()) {
            int firstTrackNo = Integer.parseInt(m.group(2));
            int secondTrackNo = Integer.parseInt(m.group(4));
            m.appendReplacement(sb, m.group(1)
                    + NumberTools.longToString(firstTrackNo)
                    + m.group(3)
                    + NumberTools.longToString(secondTrackNo)
                    + m.group(5));
       }
       m.appendTail(sb);
       return sb.toString();
   }

}

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to