lucy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Peter Karman <pe...@peknet.com>
Subject Re: [lucy-user] ProxmityQuery in C
Date Sat, 18 Feb 2017 02:10:42 GMT
kasilak wrote on 2/17/17 6:35 PM:
> Sharing the complete C code for search.c.


>     //To handle proximity queries
>     if( queryType[g_testProximity] )
>     {
>         Vector *terms = Vec_new(0);
>         Vec_Push(terms, (Obj*)query_str);
>
>       	String *field_name = Str_newf("content");
>         pquery = (Query*)ProximityQuery_new(field_name, terms, 100);


^^^ that won't work if `terms` is not first analyzed. If your index uses 
stemming or case normalization or anything else, then `terms` will not match 
anything in the lexicon.

What I pointed at earlier in this thread is how the C QueryParser handles 
phrases, which is very similar to what must happen for proximity. A proximity is 
just a phrase with the positions in a range <= maxdistance.

Since the built-in QueryParser does not yet handle proximity syntax, you'd need 
to detect that case and parse it out yourself.

Or better yet, patch the Lucy QueryParser to recognize the proximity syntax and 
submit that back here as a pull request.

The relevant place to start looking is here:

https://github.com/apache/lucy/blob/master/core/Lucy/Search/QueryParser.c#L862

and look at the logic around `is_phrase`.

HTH,
pek


-- 
Peter Karman  .  https://peknet.com/  .  https://keybase.io/peterkarman

Mime
View raw message