Index: lucene/contrib/queries/src/test/org/apache/lucene/search/BooleanFilterTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/contrib/queries/src/test/org/apache/lucene/search/BooleanFilterTest.java (revision 1328357) +++ lucene/contrib/queries/src/test/org/apache/lucene/search/BooleanFilterTest.java (revision ) @@ -301,4 +301,35 @@ booleanFilter.add(getNullDISIFilter(), Occur.MUST_NOT); tstFilterCard("A single MUST_NOT filter that returns a null DIS should be invisible", 5, booleanFilter); } + + public void testToStringOfBooleanFilterContainingTermsFilter() { + BooleanFilter booleanFilter = new BooleanFilter(); + booleanFilter.add(getTermsFilter("inStock", "N"), Occur.MUST); + booleanFilter.add(getTermsFilter("isFragile", "Y"), Occur.MUST); + + assertEquals("BooleanFilter(+inStock:N +isFragile:Y)", booleanFilter.toString()); + } + + + public void testToStringOfWrappedBooleanFilters() { + BooleanFilter orFilter = new BooleanFilter(); + + BooleanFilter stockFilter = new BooleanFilter(); + stockFilter.add(new FilterClause(getTermsFilter("inStock", "Y"), Occur.MUST)); + stockFilter.add(new FilterClause(getTermsFilter("barCode", "12345678"), Occur.MUST)); + + orFilter.add(new FilterClause(stockFilter,Occur.SHOULD)); + + + BooleanFilter productPropertyFilter = new BooleanFilter(); + productPropertyFilter.add(new FilterClause(getTermsFilter("isHeavy", "N"), Occur.MUST)); + productPropertyFilter.add(new FilterClause(getTermsFilter("isDamaged", "Y"), Occur.MUST)); + + orFilter.add(new FilterClause(productPropertyFilter,Occur.SHOULD)); + + BooleanFilter composedFilter = new BooleanFilter(); + composedFilter.add(new FilterClause(orFilter,Occur.MUST)); + + assertEquals("BooleanFilter(+BooleanFilter(BooleanFilter(+inStock:Y +barCode:12345678) BooleanFilter(+isHeavy:N +isDamaged:Y)))", composedFilter.toString()); + } } Index: lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java (revision 1328357) +++ lucene/contrib/queries/src/test/org/apache/lucene/search/TermsFilterTest.java (revision ) @@ -28,6 +28,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.util.FixedBitSet; import org.apache.lucene.util.LuceneTestCase; +import org.junit.Test; public class TermsFilterTest extends LuceneTestCase { @@ -115,5 +116,14 @@ reader2.close(); rd1.close(); rd2.close(); + } + + @Test + public void testToString() throws Exception { + TermsFilter a=new TermsFilter(); + a.addTerm(new Term("field1","a")); + a.addTerm(new Term("field1","b")); + a.addTerm(new Term("field1","c")); + assertEquals("field1:a field1:b field1:c",a.toString()); } } Index: lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java (revision 1328357) +++ lucene/contrib/queries/src/java/org/apache/lucene/search/TermsFilter.java (revision ) @@ -98,5 +98,26 @@ } return hash; } - + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + boolean firstIteration = true; + for(Term term:terms){ + appendSpaceForReadabilityIfNeeded(builder, firstIteration); + append(builder, term.field(),term.text()); + firstIteration = false; + } + return builder.toString(); + } + + private void appendSpaceForReadabilityIfNeeded(StringBuilder builder, boolean firstIteration) { + if(!firstIteration && terms.size()>1) builder.append(" "); + } + + private void append(StringBuilder builder, String field,String text) { + builder.append(field) + .append(":") + .append(text); + } }