Hi Thomas, I think one solution would be similar to the autocomplete function I've implemented in solr, you can use this as follows in solr:
FieldType: <fieldType name="autocomplete" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" /> <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="1" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory" /> <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" /> </analyzer> </fieldType> This can then match on the whole string OR part of the string. To use the QueryParser, you'd not be using the query part of the analyzer above but I've included for completeness. The core of it in regards to wildcard search is the EdgeNGramFilterFactory. Field: <field name="name" type="autocomplete" indexed="true" stored="false" required="false"/> Then you queries can then become e.g.: name:["aballadeer" TO "aperfectcirclf"] -- i.e. without wildcards. Note that you'd need to do the work of the query analyzer up front, i.e. lowercase the input and remove any non a-z chars. Additionally the '*' on the start term would need to be removed AND the '*' on the end term also removed and the last char increased by one char if the '*' is present. In this case 'e' becomes 'f'. I think you'd find this a much more efficient solution than using wildcards which can be a performance bottleneck. Regards, Dan On Fri, 2008-07-25 at 10:53 +0200, Thomas Becker wrote: > Hi all, > > I need to replace some db queries with lucene due to response time > issues for sure. In this special case I need to do a range query on a > field and a prefix query. I'm trying to prepare and try my query in luke > with no success before migrating it to java. > > I need to find all names starting with for example "A Balladeer" to "A > Perfect Circle" in the name field. The sort field is sortName (same > content as name, but untokenized for sorting). > > I tried the following in luke which should give me a few hundred docs: > > name:["A Balladeer*" TO "A Perfect Circle*"] - 0 results, also there > should be some > name:["A Balladeer*" TO "B*" - >10k results, but also returns results > which have a string in the middle or end starting with A > > I tried using sortName (untokenized) field instead: > sortName:["A Balladeer*" TO "B*" - 25 results, all starting with A* > (guess since it's untokenized), but far less than expected again > > Tried a couple of more (stupid) things with little success. I googled > around, but I'm kinda stuck here. So I'm asking the list. How can I > search all name/sortName fields in a range between "A Balladeer*" TO "A > Perfect Circle*" and get only terms back which are starting with that > terms? Is there a way to accomplish that in Java and try it in luke? > > And is there a way to sort resultsets in luke? > > Cheers, > Thomas > Daniel Rosher Developer www.thehotonlinenetwork.com d: 0207 3489 912 t: 0845 4680 568 f: 0845 4680 868 m: Beaumont House, Kensington Village, Avonmore Road, London, W14 8TS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This message is sent in confidence for the addressee only. It may contain privileged information. The contents are not to be disclosed to anyone other than the addressee. Unauthorised recipients are requested to preserve this confidentiality and to advise us of any errors in transmission. Thank you. hotonline ltd is registered in England & Wales. Registered office: One Canada Square, Canary Wharf, London E14 5AP. Registered No: 1904765. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]