Mikhail-

Let me know how to contribute a test case and I will put it on my to do
list.

When your many-to-many BlockJoin solution matures I would love to see it.

Thanks.
-Gerald


On Tue, Nov 13, 2012 at 11:52 PM, Mikhail Khludnev <
mkhlud...@griddynamics.com> wrote:

> Gerald,
> Nice to hear the the your problem is solved. Can you contribute a test
> case to reproduce this issue?
>
> FWIW, my team successfully deals with Many-to-Many in BlockJoin. It works,
> but solution is a little bit immature yet.
>
>
>
> On Wed, Nov 14, 2012 at 5:59 AM, Gerald Blanck <
> gerald.bla...@barometerit.com> wrote:
>
>> Thank you Mikhail.  Unfortunately BlockJoinQuery is not an option we can
>> leverage.
>>
>> - We have modeled our document types as different indexes/cores.
>> - Our relationships which we are attempting to join across are not
>> single-parent to many-children relationships.  They are in fact many to
>> many.
>> - Additionally, memory usage is a concern.
>>
>> FYI.  After making the code change I mentioned in my original post, we
>> have completed a full test cycle and did not experience any adverse impacts
>> to the change.  And our join query functionality returns the results we
>> wanted.  I would still be interested in hearing an explanation as to why
>> the code is written as it is in v4.0.0.
>>
>> Thanks.
>>
>>
>>
>>
>> On Tue, Nov 13, 2012 at 8:31 AM, Mikhail Khludnev <
>> mkhlud...@griddynamics.com> wrote:
>>
>>> Please find reference materials
>>>
>>>
>>> http://blog.mikemccandless.com/2012/01/searching-relational-content-with.html
>>> http://blog.griddynamics.com/2012/08/block-join-query-performs.html
>>>
>>>
>>>
>>>
>>> On Tue, Nov 13, 2012 at 3:25 PM, Gerald Blanck <
>>> gerald.bla...@barometerit.com> wrote:
>>>
>>>> Thank you.  I've not heard of BlockJoin.  I will look into it today.
>>>>  Thanks.
>>>>
>>>>
>>>> On Tue, Nov 13, 2012 at 5:05 AM, Mikhail Khludnev <
>>>> mkhlud...@griddynamics.com> wrote:
>>>>
>>>>> Replied. pls check maillist.
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Nov 13, 2012 at 11:44 AM, Mikhail Khludnev <
>>>>> mkhlud...@griddynamics.com> wrote:
>>>>>
>>>>>> Gerald,
>>>>>>
>>>>>> I wonder if you tried to approach BlockJoin for your problem? Can you
>>>>>> afford less frequent updates?
>>>>>>
>>>>>>
>>>>>> On Wed, Nov 7, 2012 at 5:40 PM, Gerald Blanck <
>>>>>> gerald.bla...@barometerit.com> wrote:
>>>>>>
>>>>>>> Thank you Erick for your reply.  I understand that search is not an
>>>>>>> RDBMS.
>>>>>>>  Yes, we do have a huge combinatorial explosion if we de-normalize
>>>>>>> and
>>>>>>> duplicate data.  In fact, I believe our use case is exactly what the
>>>>>>> Solr
>>>>>>> developers were trying to solve with the addition of the Join query.
>>>>>>>  And
>>>>>>> while the example I gave illustrates the problem we are solving with
>>>>>>> the
>>>>>>> Join functionality, it is simplistic in nature compared to what we
>>>>>>> have in
>>>>>>> actuality.
>>>>>>>
>>>>>>> Am still looking for an answer here if someone can shed some light.
>>>>>>>  Thanks.
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Nov 3, 2012 at 9:38 PM, Erick Erickson <
>>>>>>> erickerick...@gmail.com>wrote:
>>>>>>>
>>>>>>> > I'm going to go a bit sideways on you, partly because I can't
>>>>>>> answer the
>>>>>>> > question <G>...
>>>>>>> >
>>>>>>> > But, every time I see someone doing what looks like substituting
>>>>>>> "core" for
>>>>>>> > "table" and
>>>>>>> > then trying to use Solr like a DB, I get on my soap-box and
>>>>>>> preach......
>>>>>>> >
>>>>>>> > In this case, consider de-normalizing your DB so you can ask the
>>>>>>> query in
>>>>>>> > terms
>>>>>>> > of search rather than joins. e.g.
>>>>>>> >
>>>>>>> > Make each document a combination of the author and the book, with
>>>>>>> an
>>>>>>> > additional
>>>>>>> > field "author_has_written_a_bestseller". Now your query becomes a
>>>>>>> really
>>>>>>> > simple
>>>>>>> > search, "author:name AND author_has_written_a_bestseller:true".
>>>>>>> True, this
>>>>>>> > kind
>>>>>>> > of approach isn't as flexible as an RDBMS, but it's a _search_
>>>>>>> rather than
>>>>>>> > a query.
>>>>>>> > Yes, it replicates data, but unless you have a huge combinatorial
>>>>>>> > explosion, that's
>>>>>>> > not a problem.
>>>>>>> >
>>>>>>> > And the join functionality isn't called "pseudo" for nothing. It
>>>>>>> was
>>>>>>> > written for a specific
>>>>>>> > use-case. It is often expensive, especially when the field being
>>>>>>> joined has
>>>>>>> > many unique
>>>>>>> > values.
>>>>>>> >
>>>>>>> > FWIW,
>>>>>>> > Erick
>>>>>>> >
>>>>>>> >
>>>>>>> > On Fri, Nov 2, 2012 at 11:32 AM, Gerald Blanck <
>>>>>>> > gerald.bla...@barometerit.com> wrote:
>>>>>>> >
>>>>>>> > > At a high level, I have a need to be able to execute a query
>>>>>>> that joins
>>>>>>> > > across cores, and that query during its joining may join back to
>>>>>>> the
>>>>>>> > > originating core.
>>>>>>> > >
>>>>>>> > > Example:
>>>>>>> > > Find all Books written by an Author who has written a best
>>>>>>> selling Book.
>>>>>>> > >
>>>>>>> > > In Solr query syntax
>>>>>>> > > A) against the book core - bestseller:true
>>>>>>> > > B) against the author core - {!join fromIndex=book from=id
>>>>>>> > > to=bookid}bestseller:true
>>>>>>> > > C) against the book core - {!join fromIndex=author from=id
>>>>>>> > > to=authorid}{!join fromIndex=book from=id
>>>>>>> to=bookid}bestseller:true
>>>>>>> > >
>>>>>>> > > A - returns results
>>>>>>> > > B - returns results
>>>>>>> > > C - does not return results
>>>>>>> > >
>>>>>>> > > Given that A and C use the same core, I started looking for join
>>>>>>> code
>>>>>>> > that
>>>>>>> > > compares the originating core to the fromIndex and found this
>>>>>>> > > in JoinQParserPlugin (line #159).
>>>>>>> > >
>>>>>>> > >         if (info.getReq().getCore() == fromCore) {
>>>>>>> > >
>>>>>>> > >           // if this is the same core, use the searcher passed
>>>>>>> in...
>>>>>>> > > otherwise we could be warming and
>>>>>>> > >
>>>>>>> > >           // get an older searcher from the core.
>>>>>>> > >
>>>>>>> > >           fromSearcher = searcher;
>>>>>>> > >
>>>>>>> > >         } else {
>>>>>>> > >
>>>>>>> > >           // This could block if there is a static warming query
>>>>>>> with a
>>>>>>> > > join in it, and if useColdSearcher is true.
>>>>>>> > >
>>>>>>> > >           // Deadlock could result if two cores both had
>>>>>>> useColdSearcher
>>>>>>> > > and had joins that used eachother.
>>>>>>> > >
>>>>>>> > >           // This would be very predictable though (should
>>>>>>> happen every
>>>>>>> > > time if misconfigured)
>>>>>>> > >
>>>>>>> > >           fromRef = fromCore.getSearcher(false, true, null);
>>>>>>> > >
>>>>>>> > >
>>>>>>> > >           // be careful not to do anything with this searcher
>>>>>>> that
>>>>>>> > requires
>>>>>>> > > the thread local
>>>>>>> > >
>>>>>>> > >           // SolrRequestInfo in a manner that requires the core
>>>>>>> in the
>>>>>>> > > request to match
>>>>>>> > >
>>>>>>> > >           fromSearcher = fromRef.get();
>>>>>>> > >
>>>>>>> > >         }
>>>>>>> > >
>>>>>>> > > I found that if I were to modify the above code so that it
>>>>>>> always follows
>>>>>>> > > the logic in the else block, I get the results I expect.
>>>>>>> > >
>>>>>>> > > Can someone explain to me why the code is written as it is?  And
>>>>>>> if we
>>>>>>> > were
>>>>>>> > > to run with only the else block being executed, what type of
>>>>>>> adverse
>>>>>>> > > impacts we might have?
>>>>>>> > >
>>>>>>> > > Does anyone have other ideas on how to solve this issue?
>>>>>>> > >
>>>>>>> > > Thanks in advance.
>>>>>>> > > -Gerald
>>>>>>> > >
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> *Gerald Blanck*
>>>>>>>
>>>>>>> baro*m*eter*IT*
>>>>>>>
>>>>>>> 1331 Tyler Street NE, Suite 100
>>>>>>> Minneapolis, MN 55413
>>>>>>>
>>>>>>>
>>>>>>> 612.208.2802
>>>>>>>
>>>>>>> gerald.bla...@barometerit.com
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Sincerely yours
>>>>>> Mikhail Khludnev
>>>>>> Principal Engineer,
>>>>>> Grid Dynamics
>>>>>>
>>>>>> <http://www.griddynamics.com>
>>>>>>  <mkhlud...@griddynamics.com>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sincerely yours
>>>>> Mikhail Khludnev
>>>>> Principal Engineer,
>>>>> Grid Dynamics
>>>>>
>>>>> <http://www.griddynamics.com>
>>>>>  <mkhlud...@griddynamics.com>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> *Gerald Blanck*
>>>>
>>>> baro*m*eter*IT*
>>>>
>>>> 1331 Tyler Street NE, Suite 100
>>>> Minneapolis, MN 55413
>>>>
>>>>
>>>> 612.208.2802
>>>>
>>>> gerald.bla...@barometerit.com
>>>>
>>>>
>>>
>>>
>>> --
>>> Sincerely yours
>>> Mikhail Khludnev
>>> Principal Engineer,
>>> Grid Dynamics
>>>
>>> <http://www.griddynamics.com>
>>>  <mkhlud...@griddynamics.com>
>>>
>>>
>>
>>
>> --
>>
>> *Gerald Blanck*
>>
>> baro*m*eter*IT*
>>
>> 1331 Tyler Street NE, Suite 100
>> Minneapolis, MN 55413
>>
>>
>> 612.208.2802
>>
>> gerald.bla...@barometerit.com
>>
>>
>
>
> --
> Sincerely yours
> Mikhail Khludnev
> Principal Engineer,
> Grid Dynamics
>
> <http://www.griddynamics.com>
>  <mkhlud...@griddynamics.com>
>
>


-- 

*Gerald Blanck*

baro*m*eter*IT*

1331 Tyler Street NE, Suite 100
Minneapolis, MN 55413


612.208.2802

gerald.bla...@barometerit.com

Reply via email to