I should mention that this worked in 4.10.4 using a very similar code
base.  -scott

On 6/4/15, 4:51 PM, "Bauer, Herbert S. (Scott)" <bauer.sc...@mayo.edu>
wrote:

>I¹m working with Lucene  5.1 to try to make use of the relational
>structure of the block join index and query mechanisms.  I¹m querying
>with the following code:
>
>IndexReader reader =  DirectoryReader.open(index);
>
>ToParentBlockJoinIndexSearcher searcher = new
>ToParentBlockJoinIndexSearcher(reader);
>
>ToParentBlockJoinCollector collector = new
>ToParentBlockJoinCollector(Sort.RELEVANCE, 2, true, true);
>
>BitDocIdSetFilter codingScheme = new BitDocIdSetCachingWrapperFilter(
>
>                  new QueryWrapperFilter(new
>QueryParser("codingSchemeName", new StandardAnalyzer(new CharArraySet( 0,
>true))).parse(scheme.getCodingSchemeName())));
>
>  Query query = new QueryParser(null, new StandardAnalyzer(new
>CharArraySet( 0, true))).createBooleanQuery("propertyValue",
>term.getTerm(), Occur.MUST);
>
>  ToParentBlockJoinQuery termJoinQuery = new ToParentBlockJoinQuery(
>
>    query,
>
>    codingScheme,
>
>    ScoreMode.Avg);
>
>  searcher.search(termJoinQuery, collector);
>
>
>To try to get parent values, but it fails on the final line with the
>following stack trace:
>
>
>Exception in thread "main" java.lang.IllegalStateException: child query
>must only match non-parent docs, but parent docID=2147483647 matched
>childScorer=class org.apache.lucene.search.TermScorer
>
>at 
>org.apache.lucene.search.join.ToParentBlockJoinQuery$BlockJoinScorer.nextD
>oc(ToParentBlockJoinQuery.java:330)
>
>at 
>org.apache.lucene.search.join.ToParentBlockJoinIndexSearcher.search(ToPare
>ntBlockJoinIndexSearcher.java:63)
>
>at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:428)
>
>at 
>org.lexevs.lucene.prototype.LuceneQueryTrial.luceneToParentJoinQuery(Lucen
>eQueryTrial.java:78)
>
>at 
>org.lexevs.lucene.prototype.LuceneQueryTrial.main(LuceneQueryTrial.java:32
>7)
>
>
>I build indexes up to about 36Gb using a code similar to the following:
>
>
>List<Document> list = new ArrayList<Document>();
>
>//need a static
>
>int staticCount = count;
>
>ParentDocObject parent =
>builder.generateParentDoc(cs.getCodingSchemeName(),
>
>cs.getVersion(), cs.getURI(), "description");
>
>if (cs.codingSchemeName.equals(CodingScheme.THESSCHEME.codingSchemeName))
>{
>
>//One per coding Scheme
>
>int numberOfProperties = 12;
>
>if(!thesExactMatchDone){
>
>ChildDocObject child1 =
>builder.generateChildDocWithSalt(parent,SearchTerms.BLOOD.getTerm());
>
>Document doc1 = builder.mapToDocumentExactMatch(child1);
>
>list.add(doc1);
>
>count++;
>
>numberOfProperties--;
>
>ChildDocObject child =
>builder.generateChildDocWithSalt(parent,SearchTerms.CHAR.term);
>
>Document doc = builder.mapToDocumentExactMatch(child);
>
>count++;
>
>list.add(doc);
>
>numberOfProperties--;
>
>thesExactMatchDone = true;
>
>}
>
>while (numberOfProperties > 0) {
>
>if(count % 547 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGenerator(
>
>builder.randomNumberGenerator(),SearchTerms.BLOOD.getTerm()));
>
>Document doc = builder.mapToDocument(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 233 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGenerator(
>
>builder.randomNumberGenerator(),SearchTerms.CHAR.getTerm()));
>
>Document doc = builder.mapToDocument(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 71 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGenerator(
>
>builder.randomNumberGenerator(),SearchTerms.ARTICLE.getTerm()));
>
>Document doc = builder.mapToDocument(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 2237 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGenerator(
>
>builder.randomNumberGenerator(),SearchTerms.LUNG_CANCER.getTerm()));
>
>Document doc = builder.mapToDocument(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 5077 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGenerator(
>
>builder.randomNumberGenerator(),SearchTerms.LIVER_CARCINOMA.getTerm()));
>
>Document doc = builder.mapToDocument(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 2371 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGeneratorStartsWith(
>
>builder.randomNumberGenerator(),SearchTerms.BLOOD.getTerm()));
>
>Document doc = builder.mapToDocumentExactMatch(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 79 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGeneratorStartsWith(
>
>builder.randomNumberGenerator(),SearchTerms.ARTICLE.getTerm()));
>
>Document doc = builder.mapToDocumentExactMatch(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 3581 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGeneratorStartsWith(
>
>builder.randomNumberGenerator(),SearchTerms.LUNG_CANCER.getTerm()));
>
>Document doc = builder.mapToDocumentExactMatch(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>}else if(count % 23 == 0){
>
>ChildDocObject child = builder.generateChildDocWithSalt(parent,
>
>builder.randomTextGeneratorStartsWith(
>
>builder.randomNumberGenerator(),SearchTerms.CHAR.getTerm()));
>
>Document doc = builder.mapToDocumentExactMatch(child);
>
>list.add(doc);
>
>count++;numberOfProperties--;
>
>} else {
>
>ChildDocObject child = builder.generateChildDoc(parent);
>
>Document doc = builder.mapToDocument(child);
>
>list.add(doc);
>
>count++;
>
>numberOfProperties--;
>
>}
>
>}
>
>}
>
>Document par = builder.mapToDocument(parent);
>
>list.add(par);
>
>writer.addDocuments(list);
>
>}
>
>
>Which works pretty well until I scale it up using several instances of
>this.  When the nextChildDoc document retrieved gets to id 5874902 the
>line in ToParentBlockJoinQuery
>
>
>        parentDoc = parentBits.nextSetBit(nextChildDoc);
>
>
>Gives the value  2147483647 to the parentDoc, which is not a document id
>in my index if I understand lucene and Luke correctly since my index has
>only 42716877 documents.
>
>Can someone shed some light on this exception?
>
>
>Thanks,
>
>Scott Bauer
>
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to