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