diff --git a/community/lucene-index/src/main/java/org/neo4j/index/impl/lucene/legacy/IndexType.java b/community/lucene-index/src/main/java/org/neo4j/index/impl/lucene/legacy/IndexType.java index 01bba166c6386..5fe98ced9544c 100644 --- a/community/lucene-index/src/main/java/org/neo4j/index/impl/lucene/legacy/IndexType.java +++ b/community/lucene-index/src/main/java/org/neo4j/index/impl/lucene/legacy/IndexType.java @@ -139,12 +139,6 @@ void removeFieldFromDocument( Document document, String name ) document.removeFields( name ); } - @Override - protected boolean haveSortedField( IndexableField field ) - { - return !field.name().endsWith( EXACT_FIELD_SUFFIX ) && super.haveSortedField( field ); - } - @Override void removeFieldsFromDocument( Document document, String key, Object value ) { @@ -449,11 +443,6 @@ private boolean haveSortField( IndexableField[] fields ) return false; } - protected boolean haveSortedField( IndexableField field ) - { - return DocValuesType.NONE.equals( field.fieldType().docValuesType() ) && getFieldValue( field ) != null; - } - private Object getFieldValue( IndexableField field ) { Number numericFieldValue = field.numericValue(); diff --git a/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/TestLuceneIndex.java b/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/TestLuceneIndex.java index df0170401c875..5895b7c08c9c8 100644 --- a/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/TestLuceneIndex.java +++ b/community/lucene-index/src/test/java/org/neo4j/index/impl/lucene/legacy/TestLuceneIndex.java @@ -233,29 +233,30 @@ public void queryIndexWithSortByStringAfterOtherPropertyUpdate() String[] names = new String[]{"Fry", "Leela", "Bender", "Amy", "Hubert", "Calculon"}; String[] jobs = new String[]{"delivery boy", "pilot", "gambler", "intern", "professor", "actor"}; Label characters = Label.label( "characters" ); - try ( Transaction transaction = graphDb.beginTx() ) - { - for ( int i = 0; i < names.length; i++ ) - { - Node node = graphDb.createNode(characters); - node.setProperty( nameProperty, names[i] ); - node.setProperty( jobNameProperty, jobs[i] ); - index.add( node, nameProperty, names[i] ); - index.add( node, jobNameProperty, jobs[i] ); - } - transaction.success(); - } + setPropertiesAndUpdateToJunior( index, nameProperty, jobNameProperty, names, jobs, characters ); - try ( Transaction transaction = graphDb.beginTx() ) - { - ResourceIterator nodes = graphDb.findNodes( characters ); - nodes.stream().forEach( node -> - { - node.setProperty( jobNameProperty, "junior " + node.getProperty( jobNameProperty ) ); - index.add( node, jobNameProperty, node.getProperty( jobNameProperty ) ); - } ); - transaction.success(); - } + String[] sortedNames = new String[]{"Leela", "Hubert", "Fry", "Calculon", "Bender", "Amy"}; + String[] sortedJobs = {"junior professor", "junior pilot", "junior intern", "junior gambler", + "junior delivery boy", "junior actor"}; + queryAndSortNodesByStringProperty( index, nameProperty, sortedNames ); + queryAndSortNodesByStringProperty( index, jobNameProperty, sortedJobs ); + } + + @Test + public void queryCustomIndexWithSortByStringAfterOtherPropertyUpdate() + { + + Index index = nodeIndex( MapUtil.stringMap( LuceneIndexImplementation.KEY_TYPE, "exact", + LuceneIndexImplementation.KEY_TO_LOWER_CASE, "true" ) ); + commitTx(); + + String nameProperty = "NODE_NAME_CUSTOM"; + String jobNameProperty = "NODE_JOB_NAME_CUSTOM"; + + String[] names = new String[]{"Fry", "Leela", "Bender", "Amy", "Hubert", "Calculon"}; + String[] jobs = new String[]{"delivery boy", "pilot", "gambler", "intern", "professor", "actor"}; + Label characters = Label.label( "characters_custom" ); + setPropertiesAndUpdateToJunior( index, nameProperty, jobNameProperty, names, jobs, characters ); String[] sortedNames = new String[]{"Leela", "Hubert", "Fry", "Calculon", "Bender", "Amy"}; String[] sortedJobs = {"junior professor", "junior pilot", "junior intern", "junior gambler", @@ -2202,4 +2203,32 @@ private void doubleNumericPropertyValueForAllNodesWithLabel( Index index, } } + private void setPropertiesAndUpdateToJunior( Index index, String nameProperty, String jobNameProperty, + String[] names, String[] jobs, Label characters ) + { + try ( Transaction transaction = graphDb.beginTx() ) + { + for ( int i = 0; i < names.length; i++ ) + { + Node node = graphDb.createNode(characters); + node.setProperty( nameProperty, names[i] ); + node.setProperty( jobNameProperty, jobs[i] ); + index.add( node, nameProperty, names[i] ); + index.add( node, jobNameProperty, jobs[i] ); + } + transaction.success(); + } + + try ( Transaction transaction = graphDb.beginTx() ) + { + ResourceIterator nodes = graphDb.findNodes( characters ); + nodes.stream().forEach( node -> + { + node.setProperty( jobNameProperty, "junior " + node.getProperty( jobNameProperty ) ); + index.add( node, jobNameProperty, node.getProperty( jobNameProperty ) ); + } ); + transaction.success(); + } + } + }