Also note that Solr field names really shouldn't contain the period. >From the ref guide:
"Field names should consist of alphanumeric or underscore characters only and not start with a digit..." names with dots won't be rejected, but aren't guaranteed to be supported in all situations either. Best, Erick On Tue, Jan 16, 2018 at 3:21 AM, Mikhail Khludnev <m...@apache.org> wrote: > 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