Hello,

I'm trying out the Solr JOIN query functionality on trunk.  I have the
latest checkout, revision #1236272 - I did the following steps to get the
example up and running:

cd solr
ant example
java -jar start.jar
cd exampledocs
java -jar post.jar *.xml

Then I tried a few of the sample queries on the wiki page
http://wiki.apache.org/solr/Join.  In particular, this is one that I'm
interest in

Find all manufacturer docs named "belkin", then join them against (product)
> docs and filter that list to only products with a price less than 12 dollars
>
> http://localhost:8983/solr/select?q={!join+from=id+to=manu_id_s}compName_s:Belkin&fq=price:%5B%2A+TO+12%5D


However, when I run that query, I get two results, one with a price of
19.95 and another with a price of 11.5  Because of the filter query, I'm
only expecting to see one result - the one with a price of 11.99.

I was also able to replicate this in a unit test added to
org.apache.solr.TestJoin:

  @Test
  public void testJoin_withFilterQuery() throws Exception {
    assertU(add(doc("id", "1","name", "john", "title", "Director",
"dept_s","Engineering")));
    assertU(add(doc("id", "2","name", "mark", "title", "VP",
"dept_s","Marketing")));
    assertU(add(doc("id", "3","name", "nancy", "title", "MTS",
"dept_s","Sales")));
    assertU(add(doc("id", "4","name", "dave", "title", "MTS",
"dept_s","Support", "dept_s","Engineering")));
    assertU(add(doc("id", "5","name", "tina", "title", "VP",
"dept_s","Engineering")));

    assertU(add(doc("id","10", "dept_id_s", "Engineering", "text","These
guys develop stuff")));
    assertU(add(doc("id","11", "dept_id_s", "Marketing", "text","These guys
make you look good")));
    assertU(add(doc("id","12", "dept_id_s", "Sales", "text","These guys
sell stuff")));
    assertU(add(doc("id","13", "dept_id_s", "Support", "text","These guys
help customers")));

    assertU(commit());

    //***********
    //This works as expected - the correct number of results are found
    //***********
    // find people that develop stuff
    assertJQ(req("q","{!join from=dept_id_s to=dept_s}text:develop",
"fl","id")

,"/response=={'numFound':3,'start':0,'docs':[{'id':'1'},{'id':'4'},{'id':'5'}]}"
    );

*    //************
*    // this fails - the response returned finds all three people - it
should only find John*
*    //    expected =/response=={"numFound":1,"start":0,"docs":[{"id":"1"}]}
*
*    //    response = {*
*    //        "responseHeader":{*
*    //      "status":0,*
*    //          "QTime":4},*
*    //    "response":{"numFound":3,"start":0,"docs":[*
*    //      {*
*    //        "id":"1"},*
*    //      {*
*    //        "id":"4"},*
*    //      {*
*    //        "id":"5"}]*
*    //    }}*
*    //************
*    // find people that develop stuff - but limit via filter query to a
name of "john"*
*    assertJQ(req("q","{!join from=dept_id_s to=dept_s}text:develop",
"fl","id", "fq", "name:john")*
*        ,"/response=={'numFound':1,'start':0,'docs':[{'id':'1'}]}"*
*    );*

  }


Interestingly, I know this worked at some point.  I had a snapshot build in
my ivy cache from 10/2/2011 and it was working with that
build maven_artifacts/org/apache/solr/
solr/4.0-SNAPSHOT/solr-4.0-20111002.161157-1.pom"


Mike

Reply via email to