I notice the space after the 2nd +. It's not a really big issue, but it should be recognized as a syntax error (I believe), it might mean that your http layer may grab pluses and turn them into spaces, try to replace them to %2b. Regarding the exception, this is what I tried to protect from with the sibling +type:address, and you can literally follow the advice from exception message, however it just proves hypothesis above.
On Tue, Jan 16, 2018 at 12:11 PM, Dariusz Wojtas <dwoj...@gmail.com> wrote: > Please see the answers below. > > On Tue, Jan 16, 2018 at 8:40 AM, Mikhail Khludnev <m...@apache.org> wrote: > > > On Tue, Jan 16, 2018 at 10:30 AM, Dariusz Wojtas <dwoj...@gmail.com> > > wrote: > > > > > Hello Mikhail, > > > > > > I've tried it and the query executes, but it does not treat strdist() > as > > a > > > function to execute. > > > Looks like each part of the function - it's name and parameters - are > > > treated as keywords to search for against the default field. > > > > > Can you post the exact observations, rather than interpretation? > > > > Yes, > Here is the output of the original query proposed, where I believe strdist > call is not treated as a function. keyword1 if the default search field: > > <str name="parsedquery"> > firstName:Adam AllParentsAware(ToParentBlockJoinQuery (type:address > keyword1:strdic (keyword1:shakespear keyword1:address.streeo > keyword1:edit))) > </str> > This is not a function interpretation call. > > > > If I try something different: > > > > > > q=+firstName:Adam +{!parent which=type:record > > v=$chq}&chq=+type:address > > > +{!func}strdist('Shakespeare',address.street, edit) > > > > > > then I get exception: > > > org.apache.solr.search.SyntaxError: Missing end to unquoted value > > > starting at 37 str='strdist('Shakespeare',address.street,' > > > > > This particular query failed because of the space. Here is my pet peeve > in > > Solr: the syntax {!foo} captures whole string if it's in beginning of the > > string, but in the middle of the string it captures only substring until > > the first space. > > So, after removing space it should work fine. Another potential issues > are: > > single quotes (do they it ever supported?), and the dot in the fieldname > > (you never know). > > > > Yes, it's been about the space first, then about the dot in the name of the > nested field 'address.street'. > After many failed attempts with various escaping modes, I have executed it > with double parameter dereferencing, but have faced another issue: > > q=+firstName:Adam + {!parent which='type:record' score='max' v=$chq1} > chq1=+type:address +{!func v='$chq2'} > chq2=strdist('Shakespeare',address.street,edit) > > java.lang.IllegalStateException: Child query must not match same docs with > parent filter. Combine them as must clauses (+) to find a problem doc. > docId=5, class org.apache.lucene.search.DisjunctionSumScorer at > org.apache.lucene.search.join.ToParentBlockJoinQuery$BlockJoinScorer. > setScoreAndFreq(ToParentBlockJoinQuery.java:327) > at > org.apache.lucene.search.join.ToParentBlockJoinQuery$ > BlockJoinScorer.score(ToParentBlockJoinQuery.java:286) > at > org.apache.lucene.search.BooleanScorer$OrCollector. > collect(BooleanScorer.java:142) > at > org.apache.lucene.search.Weight$DefaultBulkScorer. > scoreRange(Weight.java:208) > at org.apache.lucene.search.Weight$DefaultBulkScorer. > score(Weight.java:195) > at > org.apache.lucene.search.BooleanScorer$BulkScorerAndDoc.score( > BooleanScorer.java:61) > at > org.apache.lucene.search.BooleanScorer.scoreWindowIntoBitSetAndReplay > (BooleanScorer.java:213) > at > org.apache.lucene.search.BooleanScorer.scoreWindowMultipleScorers( > BooleanScorer.java:260) > at > org.apache.lucene.search.BooleanScorer.scoreWindow(BooleanScorer.java:305) > at org.apache.lucene.search.BooleanScorer.score(BooleanScorer.java:317) at > org.apache.lucene.search.BulkScorer.score(BulkScorer.java:39) at > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:658) at > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:462) at > org.apache.solr.search.SolrIndexSearcher.buildAndRunCollectorChain( > SolrIndexSearcher.java:215) > at > org.apache.solr.search.SolrIndexSearcher.getDocListNC( > SolrIndexSearcher.java:1591) > at > org.apache.solr.search.SolrIndexSearcher.getDocListC( > SolrIndexSearcher.java:1408) > at > org.apache.solr.search.SolrIndexSearcher.search( > SolrIndexSearcher.java:575) > at > > > Any hint now? > Mo goal is to return the result of the strdist() function on a nested > document field. > > Best regards, > Dariusz Wojtas > > > > > > > Best regards, > > > Dariusz Wojtas > > > > > > > > > > > > > > > On Tue, Jan 16, 2018 at 4:04 AM, Mikhail Khludnev <m...@apache.org> > > wrote: > > > > > > > Hello, Dariusz. > > > > > > > > It should be something like > > > > q=+firstName:Adam +{!parent which=type:record > > > > v=$chq}&chq=+type:address +strdist('Shakespeare', > > > > address.street, edit) > > > > post exception if it doesn't work. > > > > > > > > On Tue, Jan 16, 2018 at 1:39 AM, Dariusz Wojtas <dwoj...@gmail.com> > > > wrote: > > > > > > > > > Hi, > > > > > > > > > > Is it possible to use the strdist() function to return distance on > > the > > > > > child document field? > > > > > Let's say I have: > > > > > > > > > > <doc> > > > > > <str name="id">1</str> > > > > > <str name="type">record</str> > > > > > <str name="firstName">Adam</str> > > > > > <doc> > > > > > <str name="id">A1</str> > > > > > <str name="type">address</str> > > > > > <str name="address.type">business</str> > > > > > <str name="address.street">Shakespeare</str> > > > > > </doc> > > > > > <doc> > > > > > <str name="id">A2</str> > > > > > <str name="type">address</str> > > > > > <str name="address.type">correspondence</str> > > > > > <str name="address.street">Baker Street</str> > > > > > </doc> > > > > > </doc> > > > > > > > > > > What I want to do is to search for documents: > > > > > type:record > > > > > firstName:Adam > > > > > and return max strdist('Shakespeare', address.street, edit) as > the > > > > > resulting score? > > > > > > > > > > or > > > > > type:record > > > > > firstName:Adam > > > > > and return max strdist('Shakespeare', address.street, edit) of > > > > > "address.type:business" as the resulting score? > > > > > > > > > > I am trying with the {!parent} mode and {!function}, various > > > > combinations. > > > > > But I do not get what I'd expect. > > > > > > > > > > Best regards, > > > > > Dariusz Wojtas > > > > > > > > > > > > > > > > > > > > > -- > > > > Sincerely yours > > > > Mikhail Khludnev > > > > > > > > > > > > > > > -- > > Sincerely yours > > Mikhail Khludnev > > > -- Sincerely yours Mikhail Khludnev