From abfddb9b01a115a8c0e4981012b0483d175842d9 Mon Sep 17 00:00:00 2001 From: Mikhaylo Demianenko Date: Wed, 3 Feb 2016 00:45:45 +0100 Subject: [PATCH] Use ConstantScoreQuery as root query of ValueEncoding provided queries. Since we do not use scores for query result evaluation, switching to constant score queries to avoid useless evaluations. --- .../kernel/api/impl/schema/ValueEncoding.java | 18 +++++++++------- .../schema/LuceneDocumentStructureTest.java | 21 ++++++++++++------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/ValueEncoding.java b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/ValueEncoding.java index 2ae5912785207..55ef6527c22be 100644 --- a/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/ValueEncoding.java +++ b/community/lucene-index/src/main/java/org/neo4j/kernel/api/impl/schema/ValueEncoding.java @@ -23,6 +23,7 @@ import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; import org.apache.lucene.index.Term; +import org.apache.lucene.search.ConstantScoreQuery; import org.apache.lucene.search.NumericRangeQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; @@ -64,10 +65,11 @@ void setFieldValue( Object value, Field field ) } @Override - NumericRangeQuery encodeQuery( Object value ) + Query encodeQuery( Object value ) { Double doubleValue = ((Number) value).doubleValue(); - return NumericRangeQuery.newDoubleRange( key(), doubleValue, doubleValue, true, true ); + return new ConstantScoreQuery( NumericRangeQuery.newDoubleRange( key(), doubleValue, doubleValue, + true, true ) ); } }, Array @@ -97,9 +99,9 @@ void setFieldValue( Object value, Field field ) } @Override - TermQuery encodeQuery( Object value ) + Query encodeQuery( Object value ) { - return new TermQuery( new Term( key(), ArrayEncoder.encode( value ) ) ); + return new ConstantScoreQuery( new TermQuery( new Term( key(), ArrayEncoder.encode( value ) ) ) ); } }, Bool @@ -129,9 +131,9 @@ void setFieldValue( Object value, Field field ) } @Override - TermQuery encodeQuery( Object value ) + Query encodeQuery( Object value ) { - return new TermQuery( new Term( key(), value.toString() ) ); + return new ConstantScoreQuery( new TermQuery( new Term( key(), value.toString() ) ) ); } }, String @@ -162,9 +164,9 @@ void setFieldValue( Object value, Field field ) } @Override - TermQuery encodeQuery( Object value ) + Query encodeQuery( Object value ) { - return new TermQuery( new Term( key(), value.toString() ) ); + return new ConstantScoreQuery( new TermQuery( new Term( key(), value.toString() ) ) ); } }; diff --git a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/LuceneDocumentStructureTest.java b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/LuceneDocumentStructureTest.java index 28fe3da261048..d8d3c2d193ec8 100644 --- a/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/LuceneDocumentStructureTest.java +++ b/community/lucene-index/src/test/java/org/neo4j/kernel/api/impl/schema/LuceneDocumentStructureTest.java @@ -22,6 +22,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.search.ConstantScoreQuery; import org.apache.lucene.search.NumericRangeQuery; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.TermQuery; @@ -32,6 +33,7 @@ import static junit.framework.Assert.assertNull; import static junit.framework.TestCase.assertEquals; import static org.neo4j.kernel.api.impl.schema.LuceneDocumentStructure.NODE_ID_KEY; +import static org.neo4j.kernel.api.impl.schema.LuceneDocumentStructure.newSeekQuery; import static org.neo4j.kernel.api.impl.schema.ValueEncoding.Array; import static org.neo4j.kernel.api.impl.schema.ValueEncoding.Bool; import static org.neo4j.kernel.api.impl.schema.ValueEncoding.Number; @@ -50,7 +52,7 @@ public void tooLongStringShouldBeSkipped() @Test public void tooLongArrayShouldBeSkipped() { - byte[] bytes = RandomStringUtils.randomAscii( IndexWriter.MAX_TERM_LENGTH + 10).getBytes(); + byte[] bytes = RandomStringUtils.randomAscii( IndexWriter.MAX_TERM_LENGTH + 10 ).getBytes(); Document document = LuceneDocumentStructure.documentRepresentingProperty( 123, bytes ); assertNull( document.getField( Array.key() ) ); } @@ -111,7 +113,8 @@ public void shouldBuildDocumentRepresentingArrayProperty() throws Exception public void shouldBuildQueryRepresentingBoolProperty() throws Exception { // given - TermQuery query = (TermQuery) LuceneDocumentStructure.newSeekQuery( true ); + ConstantScoreQuery constantScoreQuery = (ConstantScoreQuery) newSeekQuery( true ); + TermQuery query = (TermQuery) constantScoreQuery.getQuery(); // then assertEquals( "true", query.getTerm().text() ); @@ -121,10 +124,10 @@ public void shouldBuildQueryRepresentingBoolProperty() throws Exception public void shouldBuildQueryRepresentingStringProperty() throws Exception { // given - TermQuery query = (TermQuery) LuceneDocumentStructure.newSeekQuery( "Characters" ); + ConstantScoreQuery query = (ConstantScoreQuery) newSeekQuery( "Characters" ); // then - assertEquals( "Characters", query.getTerm().text() ); + assertEquals( "Characters", ((TermQuery) query.getQuery()).getTerm().text() ); } @SuppressWarnings( "unchecked" ) @@ -132,7 +135,8 @@ public void shouldBuildQueryRepresentingStringProperty() throws Exception public void shouldBuildQueryRepresentingNumberProperty() throws Exception { // given - NumericRangeQuery query = (NumericRangeQuery) LuceneDocumentStructure.newSeekQuery( 12 ); + ConstantScoreQuery constantScoreQuery = (ConstantScoreQuery) newSeekQuery( 12 ); + NumericRangeQuery query = (NumericRangeQuery) constantScoreQuery.getQuery(); // then assertEquals( 12.0, query.getMin() ); @@ -143,7 +147,9 @@ public void shouldBuildQueryRepresentingNumberProperty() throws Exception public void shouldBuildQueryRepresentingArrayProperty() throws Exception { // given - TermQuery query = (TermQuery) LuceneDocumentStructure.newSeekQuery( new Integer[]{1, 2, 3} ); + ConstantScoreQuery constantScoreQuery = (ConstantScoreQuery) + newSeekQuery( new Integer[]{1, 2, 3} ); + TermQuery query = (TermQuery) constantScoreQuery.getQuery(); // then assertEquals( "D1.0|2.0|3.0|", query.getTerm().text() ); @@ -167,7 +173,8 @@ public void shouldBuildRangeSeekByNumberQueryForStrings() throws Exception public void shouldBuildRangeSeekByStringQueryForStrings() throws Exception { // given - TermRangeQuery query = (TermRangeQuery) LuceneDocumentStructure.newRangeSeekByStringQuery( "foo", false, null, true ); + TermRangeQuery query = + (TermRangeQuery) LuceneDocumentStructure.newRangeSeekByStringQuery( "foo", false, null, true ); // then assertEquals( "string", query.getField() );