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

Reply via email to