You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2022/03/02 13:26:18 UTC
[solr] branch branch_9_0 updated: SOLR-14920: Spotless formatting for core - test only (#711)
This is an automated email from the ASF dual-hosted git repository.
krisden pushed a commit to branch branch_9_0
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9_0 by this push:
new 7d5625a SOLR-14920: Spotless formatting for core - test only (#711)
7d5625a is described below
commit 7d5625a0e42436bae177ecf6256e11b146d19147
Author: Kevin Risden <ri...@users.noreply.github.com>
AuthorDate: Tue Mar 1 15:37:48 2022 -0500
SOLR-14920: Spotless formatting for core - test only (#711)
---
gradle/validation/spotless.gradle | 2 +-
.../apache/solr/AnalysisAfterCoreReloadTest.java | 92 +-
.../org/apache/solr/BasicFunctionalityTest.java | 1047 ++-
.../test/org/apache/solr/ConvertedLegacyTest.java | 1644 ++---
.../src/test/org/apache/solr/CursorPagingTest.java | 1301 ++--
.../org/apache/solr/DisMaxRequestHandlerTest.java | 379 +-
.../solr/DistributedIntervalFacetingTest.java | 92 +-
.../src/test/org/apache/solr/EchoParamsTest.java | 56 +-
.../apache/solr/HelloWorldSolrCloudTestCase.java | 45 +-
.../test/org/apache/solr/MinimalSchemaTest.java | 146 +-
.../src/test/org/apache/solr/OutputWriterTest.java | 130 +-
solr/core/src/test/org/apache/solr/SampleTest.java | 113 +-
.../src/test/org/apache/solr/SolrInfoBeanTest.java | 84 +-
.../apache/solr/SolrTestCaseJ4DeleteCoreTest.java | 7 +-
.../test/org/apache/solr/SolrTestCaseJ4Test.java | 40 +-
.../test/org/apache/solr/TestCrossCoreJoin.java | 166 +-
.../solr/TestCursorMarkWithoutUniqueKey.java | 36 +-
.../org/apache/solr/TestDistributedGrouping.java | 1781 ++++-
.../apache/solr/TestDistributedMissingSort.java | 1347 +++-
.../org/apache/solr/TestDistributedSearch.java | 1967 ++++--
.../test/org/apache/solr/TestDocumentBuilder.java | 19 +-
.../test/org/apache/solr/TestGroupingSearch.java | 1929 ++++--
.../apache/solr/TestHighlightDedupGrouping.java | 85 +-
solr/core/src/test/org/apache/solr/TestJoin.java | 347 +-
.../test/org/apache/solr/TestRandomDVFaceting.java | 192 +-
.../test/org/apache/solr/TestRandomFaceting.java | 380 +-
.../solr/TestSimpleTrackingShardHandler.java | 20 +-
.../org/apache/solr/TestSolrCoreProperties.java | 50 +-
.../test/org/apache/solr/TestTolerantSearch.java | 93 +-
solr/core/src/test/org/apache/solr/TestTrie.java | 340 +-
.../solr/analysis/CommonGramsPhraseQueryTest.java | 104 +-
.../PathHierarchyTokenizerFactoryTest.java | 123 +-
.../analysis/ProtectedTermFilterFactoryTest.java | 54 +-
.../org/apache/solr/analysis/TestCharFilters.java | 63 +-
.../solr/analysis/TestDeprecatedFilters.java | 3 +-
.../solr/analysis/TestLuceneMatchVersion.java | 22 +-
.../TestReversedWildcardFilterFactory.java | 148 +-
.../analysis/TestWordDelimiterFilterFactory.java | 197 +-
.../analysis/ThrowingMockTokenFilterFactory.java | 19 +-
.../apache/solr/analysis/TokenizerChainTest.java | 12 +-
.../TestEmbeddedSolrServerAdminHandler.java | 55 +-
.../TestEmbeddedSolrServerConstructors.java | 14 +-
.../embedded/TestEmbeddedSolrServerSchemaAPI.java | 42 +-
.../client/solrj/embedded/TestJettySolrRunner.java | 44 +-
.../client/solrj/impl/ConnectionReuseTest.java | 69 +-
.../org/apache/solr/cloud/ActionThrottleTest.java | 39 +-
.../test/org/apache/solr/cloud/AddReplicaTest.java | 80 +-
.../apache/solr/cloud/AliasIntegrationTest.java | 587 +-
.../cloud/AssignBackwardCompatibilityTest.java | 49 +-
.../apache/solr/cloud/BasicDistributedZk2Test.java | 7 +-
.../apache/solr/cloud/BasicDistributedZkTest.java | 11 +-
.../solr/cloud/ChaosMonkeyNothingIsSafeTest.java | 5 +-
...aosMonkeyNothingIsSafeWithPullReplicasTest.java | 191 +-
.../solr/cloud/ChaosMonkeySafeLeaderTest.java | 1 -
.../ChaosMonkeySafeLeaderWithPullReplicasTest.java | 124 +-
.../solr/cloud/ChaosMonkeyShardSplitTest.java | 77 +-
.../org/apache/solr/cloud/CleanupOldIndexTest.java | 37 +-
.../cloud/CloudExitableDirectoryReaderTest.java | 324 +-
.../apache/solr/cloud/ClusterStateMockUtil.java | 107 +-
.../solr/cloud/ClusterStateMockUtilTest.java | 51 +-
.../org/apache/solr/cloud/ClusterStateTest.java | 58 +-
.../apache/solr/cloud/ClusterStateUpdateTest.java | 79 +-
.../org/apache/solr/cloud/CollectionPropsTest.java | 140 +-
.../solr/cloud/CollectionStateZnodeTest.java | 28 +-
.../apache/solr/cloud/CollectionsAPISolrJTest.java | 919 ++-
.../cloud/ConcurrentCreateRoutedAliasTest.java | 95 +-
.../apache/solr/cloud/ConfigSetApiLockingTest.java | 67 +-
.../apache/solr/cloud/ConnectionManagerTest.java | 51 +-
.../solr/cloud/CreateCollectionCleanupTest.java | 105 +-
.../apache/solr/cloud/CreateRoutedAliasTest.java | 393 +-
.../solr/cloud/DeleteInactiveReplicaTest.java | 64 +-
.../cloud/DeleteLastCustomShardedReplicaTest.java | 16 +-
.../test/org/apache/solr/cloud/DeleteNodeTest.java | 42 +-
.../org/apache/solr/cloud/DeleteReplicaTest.java | 497 +-
.../org/apache/solr/cloud/DeleteShardTest.java | 103 +-
.../org/apache/solr/cloud/DeleteStatusTest.java | 50 +-
.../apache/solr/cloud/DistribCursorPagingTest.java | 663 +-
.../DistribDocExpirationUpdateProcessorTest.java | 303 +-
.../solr/cloud/DistribJoinFromCollectionTest.java | 147 +-
.../solr/cloud/DistributedApiAsyncTrackerTest.java | 232 +-
.../apache/solr/cloud/DistributedQueueTest.java | 65 +-
.../solr/cloud/DistributedVersionInfoTest.java | 275 +-
.../apache/solr/cloud/DocValuesNotIndexedTest.java | 319 +-
.../org/apache/solr/cloud/ForceLeaderTest.java | 134 +-
.../solr/cloud/FullSolrCloudDistribCmdsTest.java | 585 +-
.../solr/cloud/HttpPartitionOnCommitTest.java | 68 +-
.../org/apache/solr/cloud/HttpPartitionTest.java | 311 +-
.../cloud/HttpPartitionWithTlogReplicasTest.java | 3 +-
.../solr/cloud/LeaderElectionContextKeyTest.java | 75 +-
.../solr/cloud/LeaderElectionIntegrationTest.java | 47 +-
.../org/apache/solr/cloud/LeaderElectionTest.java | 284 +-
.../cloud/LeaderFailoverAfterPartitionTest.java | 143 +-
.../cloud/LeaderFailureAfterFreshStartTest.java | 84 +-
.../apache/solr/cloud/LeaderTragicEventTest.java | 102 +-
.../solr/cloud/LeaderVoteWaitTimeoutTest.java | 156 +-
.../org/apache/solr/cloud/MigrateRouteKeyTest.java | 100 +-
.../solr/cloud/MissingSegmentRecoveryTest.java | 31 +-
.../cloud/MockScriptUpdateProcessorFactory.java | 28 +-
.../apache/solr/cloud/MockSimpleZkController.java | 10 +-
.../test/org/apache/solr/cloud/MockSolrSource.java | 16 +-
.../org/apache/solr/cloud/MoveReplicaTest.java | 10 +-
.../solr/cloud/MultiSolrCloudTestCaseTest.java | 21 +-
.../apache/solr/cloud/MultiThreadedOCPTest.java | 234 +-
.../solr/cloud/NestedShardedAtomicUpdateTest.java | 132 +-
.../org/apache/solr/cloud/NodeMutatorTest.java | 38 +-
.../test/org/apache/solr/cloud/NodeRolesTest.java | 64 +-
.../OutOfBoxZkACLAndCredentialsProvidersTest.java | 64 +-
...OverriddenZkACLAndCredentialsProvidersTest.java | 383 +-
.../OverseerCollectionConfigSetProcessorTest.java | 1116 ++--
.../solr/cloud/OverseerModifyCollectionTest.java | 29 +-
.../org/apache/solr/cloud/OverseerRolesTest.java | 86 +-
.../solr/cloud/OverseerSolrResponseTest.java | 39 +-
...verseerSolrResponseUnsafeSerializationTest.java | 23 +-
.../org/apache/solr/cloud/OverseerStatusTest.java | 83 +-
.../apache/solr/cloud/OverseerTaskQueueTest.java | 14 +-
.../test/org/apache/solr/cloud/OverseerTest.java | 1359 ++--
.../apache/solr/cloud/PackageManagerCLITest.java | 103 +-
.../apache/solr/cloud/PeerSyncReplicationTest.java | 116 +-
.../solr/cloud/RecoveryAfterSoftCommitTest.java | 36 +-
.../test/org/apache/solr/cloud/RecoveryZkTest.java | 2 -
.../apache/solr/cloud/ReindexCollectionTest.java | 268 +-
.../apache/solr/cloud/RemoteQueryErrorTest.java | 28 +-
.../org/apache/solr/cloud/ReplaceNodeTest.java | 161 +-
.../apache/solr/cloud/ReplicationFactorTest.java | 224 +-
.../solr/cloud/RestartWhileUpdatingTest.java | 3 +-
.../org/apache/solr/cloud/RollingRestartTest.java | 73 +-
.../test/org/apache/solr/cloud/RouteFieldTest.java | 60 +-
.../org/apache/solr/cloud/SSLMigrationTest.java | 98 +-
.../solr/cloud/SegmentTerminateEarlyTestState.java | 234 +-
.../apache/solr/cloud/ShardRoutingCustomTest.java | 33 +-
.../org/apache/solr/cloud/ShardRoutingTest.java | 247 +-
.../test/org/apache/solr/cloud/ShardTermsTest.java | 7 +-
.../test/org/apache/solr/cloud/SliceStateTest.java | 11 +-
.../org/apache/solr/cloud/SolrCLIZkUtilsTest.java | 1021 +--
.../apache/solr/cloud/SolrCloudExampleTest.java | 177 +-
.../org/apache/solr/cloud/SolrXmlInZkTest.java | 74 +-
.../test/org/apache/solr/cloud/SplitShardTest.java | 208 +-
.../test/org/apache/solr/cloud/SyncSliceTest.java | 8 +-
.../solr/cloud/SystemCollectionCompatTest.java | 87 +-
.../solr/cloud/TestAuthenticationFramework.java | 70 +-
.../apache/solr/cloud/TestBaseStatsCacheCloud.java | 181 +-
.../apache/solr/cloud/TestCloudConsistency.java | 210 +-
.../apache/solr/cloud/TestCloudDeleteByQuery.java | 130 +-
.../apache/solr/cloud/TestCloudInspectUtil.java | 74 +-
.../TestCloudPhrasesIdentificationComponent.java | 95 +-
.../org/apache/solr/cloud/TestCloudPivotFacet.java | 397 +-
.../solr/cloud/TestCloudPseudoReturnFields.java | 633 +-
.../org/apache/solr/cloud/TestCloudRecovery.java | 84 +-
.../org/apache/solr/cloud/TestCloudRecovery2.java | 110 +-
.../solr/cloud/TestCloudSearcherWarming.java | 201 +-
.../apache/solr/cloud/TestClusterProperties.java | 7 +-
.../org/apache/solr/cloud/TestConfigSetsAPI.java | 1171 +++-
.../solr/cloud/TestConfigSetsAPIExclusivity.java | 42 +-
.../solr/cloud/TestConfigSetsAPIShareSchema.java | 32 +-
.../solr/cloud/TestConfigSetsAPIZkFailure.java | 99 +-
.../cloud/TestDeleteCollectionOnDownNodes.java | 23 +-
.../solr/cloud/TestDistribDocBasedVersion.java | 134 +-
.../org/apache/solr/cloud/TestDistributedMap.java | 66 +-
.../solr/cloud/TestDownShardTolerantSearch.java | 46 +-
.../cloud/TestDynamicFieldNamesIndexCorrectly.java | 1369 ++--
.../solr/cloud/TestExactSharedStatsCacheCloud.java | 4 +-
.../solr/cloud/TestExactStatsCacheCloud.java | 4 +-
.../cloud/TestExclusionRuleCollectionAccess.java | 20 +-
.../org/apache/solr/cloud/TestHashPartitioner.java | 187 +-
.../apache/solr/cloud/TestLRUStatsCacheCloud.java | 7 +-
.../org/apache/solr/cloud/TestLazySolrCluster.java | 121 +-
.../cloud/TestLeaderElectionWithEmptyReplica.java | 49 +-
.../solr/cloud/TestLeaderElectionZkExpiry.java | 44 +-
.../solr/cloud/TestLocalStatsCacheCloud.java | 10 +-
.../test/org/apache/solr/cloud/TestLockTree.java | 60 +-
.../solr/cloud/TestMiniSolrCloudClusterSSL.java | 293 +-
.../solr/cloud/TestOnReconnectListenerSupport.java | 52 +-
.../org/apache/solr/cloud/TestPrepRecovery.java | 55 +-
.../org/apache/solr/cloud/TestPullReplica.java | 528 +-
.../solr/cloud/TestPullReplicaErrorHandling.java | 188 +-
.../apache/solr/cloud/TestPullReplicaWithAuth.java | 102 +-
.../solr/cloud/TestQueryingOnDownCollection.java | 111 +-
.../test/org/apache/solr/cloud/TestRSAKeyPair.java | 58 +-
.../apache/solr/cloud/TestRandomFlRTGCloud.java | 960 +--
.../solr/cloud/TestRandomRequestDistribution.java | 108 +-
.../apache/solr/cloud/TestRebalanceLeaders.java | 418 +-
.../apache/solr/cloud/TestRequestForwarding.java | 18 +-
.../apache/solr/cloud/TestSSLRandomization.java | 214 +-
.../org/apache/solr/cloud/TestSegmentSorting.java | 112 +-
.../solr/cloud/TestShortCircuitedRequests.java | 34 +-
.../solr/cloud/TestSizeLimitedDistributedMap.java | 20 +-
.../solr/cloud/TestSkipOverseerOperations.java | 203 +-
.../cloud/TestStressCloudBlindAtomicUpdates.java | 310 +-
.../solr/cloud/TestStressInPlaceUpdates.java | 737 ++-
.../org/apache/solr/cloud/TestStressLiveNodes.java | 134 +-
.../solr/cloud/TestTlogReplayVsRecovery.java | 180 +-
.../org/apache/solr/cloud/TestTlogReplica.java | 670 +-
.../cloud/TestTolerantUpdateProcessorCloud.java | 1212 ++--
.../TestTolerantUpdateProcessorRandomCloud.java | 245 +-
.../cloud/TestWaitForStateWithJettyShutdowns.java | 113 +-
.../cloud/TlogReplayBufferedWhileIndexingTest.java | 4 +-
.../solr/cloud/TriLevelCompositeIdRoutingTest.java | 69 +-
.../solr/cloud/TrollingIndexReaderFactory.java | 218 +-
.../apache/solr/cloud/UnloadDistributedZkTest.java | 8 +-
.../VMParamsZkACLAndCredentialsProvidersTest.java | 5 +-
.../src/test/org/apache/solr/cloud/ZkCLITest.java | 274 +-
.../org/apache/solr/cloud/ZkControllerTest.java | 247 +-
.../apache/solr/cloud/ZkDistributedLockTest.java | 203 +-
.../test/org/apache/solr/cloud/ZkFailoverTest.java | 27 +-
.../org/apache/solr/cloud/ZkNodePropsTest.java | 7 +-
.../org/apache/solr/cloud/ZkShardTermsTest.java | 72 +-
.../org/apache/solr/cloud/ZkSolrClientTest.java | 280 +-
.../AsyncCallRequestStatusResponseTest.java | 54 +-
.../BackupRestoreApiErrorConditionsTest.java | 230 +-
.../api/collections/CollectionApiLockingTest.java | 138 +-
.../api/collections/CollectionReloadTest.java | 57 +-
.../collections/CollectionTooManyReplicasTest.java | 214 +-
.../CollectionsAPIAsyncDistributedZkTest.java | 214 +-
.../CollectionsAPIDistributedZkTest.java | 4 +-
.../ConcurrentDeleteAndCreateCollectionTest.java | 86 +-
.../api/collections/CustomCollectionTest.java | 193 +-
.../LocalFSCloudIncrementalBackupTest.java | 114 +-
.../solr/cloud/api/collections/PurgeGraphTest.java | 349 +-
.../api/collections/ReplicaPropertiesBase.java | 88 +-
.../solr/cloud/api/collections/ShardSplitTest.java | 806 ++-
.../SimpleCollectionCreateDeleteTest.java | 323 +-
.../cloud/api/collections/SplitByPrefixTest.java | 173 +-
.../cloud/api/collections/TestCollectionAPI.java | 604 +-
.../TestCollectionsAPIViaSolrCloudCluster.java | 55 +-
.../collections/TestLocalFSCloudBackupRestore.java | 87 +-
.../api/collections/TestReplicaProperties.java | 241 +-
.../TestRequestStatusCollectionAPI.java | 59 +-
.../cloud/overseer/TestClusterStateMutator.java | 42 +-
.../overseer/ZkCollectionPropsCachingTest.java | 37 +-
.../solr/cloud/overseer/ZkStateReaderTest.java | 41 +-
.../solr/cloud/overseer/ZkStateWriterTest.java | 81 +-
.../solr/cluster/events/AllEventsListener.java | 11 +-
.../cluster/events/ClusterEventProducerTest.java | 242 +-
.../impl/CollectionsRepairEventListenerTest.java | 47 +-
.../cluster/placement/AttributeFetcherForTest.java | 6 +-
.../apache/solr/cluster/placement/Builders.java | 254 +-
.../solr/cluster/placement/BuildersTest.java | 93 +-
.../placement/ClusterAbstractionsForTest.java | 65 +-
.../impl/PlacementPluginIntegrationTest.java | 335 +-
.../impl/SimpleClusterAbstractionsTest.java | 40 +-
.../plugins/AffinityPlacementFactoryTest.java | 738 ++-
.../solr/common/cloud/ZkDynamicConfigTest.java | 23 +-
.../solr/common/cloud/ZkStateReaderAccessor.java | 6 +-
.../solr/common/util/TestObjectReleaseTracker.java | 96 +-
.../apache/solr/core/AlternateDirectoryTest.java | 29 +-
.../apache/solr/core/BlobRepositoryCloudTest.java | 49 +-
.../solr/core/BlobRepositoryMockingTest.java | 154 +-
.../solr/core/ByteBuffersDirectoryFactoryTest.java | 43 +-
.../solr/core/ConfigureRecoveryStrategyTest.java | 37 +-
.../test/org/apache/solr/core/CoreSorterTest.java | 126 +-
.../solr/core/CountUsageValueSourceParser.java | 37 +-
.../apache/solr/core/DirectoryFactoriesTest.java | 53 +-
.../org/apache/solr/core/DirectoryFactoryTest.java | 36 +-
.../apache/solr/core/DummyValueSourceParser.java | 32 +-
.../solr/core/ExitableDirectoryReaderTest.java | 119 +-
.../org/apache/solr/core/FakeDeletionPolicy.java | 9 +-
.../src/test/org/apache/solr/core/HelloStream.java | 22 +-
.../org/apache/solr/core/MockEventListener.java | 11 +-
.../apache/solr/core/MockShardHandlerFactory.java | 7 +-
.../test/org/apache/solr/core/PluginInfoTest.java | 98 +-
.../org/apache/solr/core/QueryResultKeyTest.java | 92 +-
.../apache/solr/core/RAMDirectoryFactoryTest.java | 34 +-
.../org/apache/solr/core/RequestHandlersTest.java | 115 +-
.../org/apache/solr/core/ResourceLoaderTest.java | 155 +-
.../src/test/org/apache/solr/core/SOLR749Test.java | 130 +-
.../solr/core/SolrCoreCheckLockOnStartupTest.java | 45 +-
.../test/org/apache/solr/core/SolrCoreTest.java | 285 +-
.../solr/core/TestBackupRepositoryFactory.java | 19 +-
.../test/org/apache/solr/core/TestBadConfig.java | 32 +-
.../org/apache/solr/core/TestCodecSupport.java | 161 +-
.../org/apache/solr/core/TestConfLoadPerf.java | 60 +-
.../src/test/org/apache/solr/core/TestConfig.java | 229 +-
.../org/apache/solr/core/TestConfigOverlay.java | 29 +-
.../apache/solr/core/TestConfigSetImmutable.java | 55 +-
.../apache/solr/core/TestConfigSetProperties.java | 25 +-
.../test/org/apache/solr/core/TestConfigSets.java | 82 +-
.../org/apache/solr/core/TestCoreContainer.java | 424 +-
.../org/apache/solr/core/TestCoreDiscovery.java | 318 +-
.../apache/solr/core/TestCorePropertiesReload.java | 12 +-
.../org/apache/solr/core/TestCustomStream.java | 28 +-
.../solr/core/TestImplicitCoreProperties.java | 37 +-
.../apache/solr/core/TestInfoStreamLogging.java | 4 +-
.../test/org/apache/solr/core/TestInitParams.java | 55 +-
.../org/apache/solr/core/TestJmxIntegration.java | 95 +-
.../test/org/apache/solr/core/TestLazyCores.java | 596 +-
.../apache/solr/core/TestMergePolicyConfig.java | 127 +-
.../org/apache/solr/core/TestMinimalConfig.java | 8 +-
.../src/test/org/apache/solr/core/TestNRTOpen.java | 33 +-
.../apache/solr/core/TestQuerySenderListener.java | 78 +-
.../apache/solr/core/TestQuerySenderNoQuery.java | 53 +-
.../apache/solr/core/TestReloadAndDeleteDocs.java | 9 +-
.../apache/solr/core/TestShardHandlerFactory.java | 8 +-
.../org/apache/solr/core/TestSimpleTextCodec.java | 31 +-
.../apache/solr/core/TestSolrConfigHandler.java | 839 +--
.../apache/solr/core/TestSolrDeletionPolicy1.java | 82 +-
.../apache/solr/core/TestSolrDeletionPolicy2.java | 24 +-
.../org/apache/solr/core/TestSolrIndexConfig.java | 18 +-
.../src/test/org/apache/solr/core/TestSolrXml.java | 250 +-
.../org/apache/solr/core/TestXIncludeConfig.java | 39 +-
.../solr/core/backup/BackupFilePathsTest.java | 96 +-
.../org/apache/solr/core/backup/BackupIdTest.java | 50 +-
.../apache/solr/core/backup/ShardBackupIdTest.java | 42 +-
.../core/snapshots/TestSolrCloudSnapshots.java | 155 +-
.../solr/core/snapshots/TestSolrCoreSnapshots.java | 131 +-
.../solr/filestore/TestDistribPackageStore.java | 263 +-
.../handler/AnalysisRequestHandlerTestBase.java | 29 +-
.../handler/BinaryUpdateRequestHandlerTest.java | 7 +-
.../apache/solr/handler/CSVRequestHandlerTest.java | 7 +-
.../DocumentAnalysisRequestHandlerTest.java | 300 +-
.../handler/FieldAnalysisRequestHandlerTest.java | 579 +-
.../org/apache/solr/handler/JsonLoaderTest.java | 865 +--
.../solr/handler/MoreLikeThisHandlerTest.java | 196 +-
.../solr/handler/PingRequestHandlerTest.java | 106 +-
.../apache/solr/handler/ReplicationTestHelper.java | 505 +-
.../apache/solr/handler/RequestLoggingTest.java | 16 +-
.../org/apache/solr/handler/SearchHandlerTest.java | 73 +-
.../org/apache/solr/handler/TestBlobHandler.java | 75 +-
.../org/apache/solr/handler/TestCSVLoader.java | 324 +-
.../org/apache/solr/handler/TestConfigReload.java | 54 +-
.../apache/solr/handler/TestContainerPlugin.java | 417 +-
.../handler/TestHealthCheckHandlerLegacyMode.java | 360 +-
.../solr/handler/TestIncrementalCoreBackup.java | 729 +-
.../solr/handler/TestReplicationHandler.java | 786 ++-
.../solr/handler/TestReplicationHandlerBackup.java | 130 +-
.../TestReplicationHandlerDiskOverFlow.java | 223 +-
.../org/apache/solr/handler/TestReqParamsAPI.java | 344 +-
.../org/apache/solr/handler/TestRequestId.java | 50 +-
.../org/apache/solr/handler/TestRestoreCore.java | 120 +-
.../solr/handler/TestSampleDocumentsLoader.java | 23 +-
.../solr/handler/TestSnapshotCoreBackup.java | 411 +-
.../solr/handler/TestSolrConfigHandlerCloud.java | 312 +-
.../handler/TestSolrConfigHandlerConcurrent.java | 111 +-
.../solr/handler/TestStressIncrementalBackup.java | 266 +-
.../solr/handler/TestStressThreadBackup.java | 306 +-
.../solr/handler/TestSystemCollAutoCreate.java | 8 +-
.../handler/ThrowErrorOnInitRequestHandler.java | 11 +-
.../apache/solr/handler/V2ApiIntegrationTest.java | 138 +-
.../solr/handler/V2ClusterAPIMappingTest.java | 137 +-
.../org/apache/solr/handler/V2StandaloneTest.java | 11 +-
.../solr/handler/XmlUpdateRequestHandlerTest.java | 310 +-
.../solr/handler/admin/AdminHandlersProxyTest.java | 57 +-
.../handler/admin/CoreAdminCreateDiscoverTest.java | 218 +-
.../solr/handler/admin/CoreAdminHandlerTest.java | 374 +-
.../solr/handler/admin/CoreAdminOperationTest.java | 264 +-
.../handler/admin/CoreAdminRequestStatusTest.java | 65 +-
.../admin/CoreMergeIndexesAdminHandlerTest.java | 47 +-
.../solr/handler/admin/DaemonStreamApiTest.java | 159 +-
.../solr/handler/admin/HealthCheckHandlerTest.java | 134 +-
.../solr/handler/admin/IndexSizeEstimatorTest.java | 109 +-
.../apache/solr/handler/admin/InfoHandlerTest.java | 53 +-
.../solr/handler/admin/LoggingHandlerTest.java | 54 +-
.../solr/handler/admin/LukeRequestHandlerTest.java | 228 +-
.../solr/handler/admin/MBeansHandlerTest.java | 224 +-
.../solr/handler/admin/MetricsHandlerTest.java | 510 +-
.../admin/PropertiesRequestHandlerTest.java | 17 +-
.../admin/SecurityConfHandlerLocalForTesting.java | 7 +-
.../handler/admin/SecurityConfHandlerTest.java | 184 +-
.../admin/SegmentsInfoRequestHandlerTest.java | 141 +-
.../handler/admin/ShowFileRequestHandlerTest.java | 108 +-
.../solr/handler/admin/SolrEnvironmentTest.java | 6 +-
.../solr/handler/admin/SplitHandlerTest.java | 137 +-
.../solr/handler/admin/StatsReloadRaceTest.java | 72 +-
.../solr/handler/admin/SystemInfoHandlerTest.java | 21 +-
.../solr/handler/admin/TestApiFramework.java | 281 +-
.../solr/handler/admin/TestCollectionAPIs.java | 403 +-
.../apache/solr/handler/admin/TestConfigsApi.java | 41 +-
.../solr/handler/admin/TestCoreAdminApis.java | 115 +-
.../solr/handler/admin/ThreadDumpHandlerTest.java | 282 +-
.../admin/V2CollectionBackupsAPIMappingTest.java | 101 +-
.../handler/admin/V2CollectionsAPIMappingTest.java | 482 +-
.../solr/handler/admin/V2CoresAPIMappingTest.java | 317 +-
.../solr/handler/admin/ZookeeperReadAPITest.java | 45 +-
.../admin/ZookeeperStatusHandlerFailureTest.java | 35 +-
.../handler/admin/ZookeeperStatusHandlerTest.java | 254 +-
.../admin/api/V2CollectionAPIMappingTest.java | 293 +-
.../handler/admin/api/V2NodeAPIMappingTest.java | 476 +-
.../handler/admin/api/V2ShardsAPIMappingTest.java | 468 +-
.../solr/handler/admin/api/package-info.java | 6 +-
.../solr/handler/component/BadComponentTest.java | 8 +-
.../handler/component/CloudReplicaSourceTest.java | 215 +-
.../component/CustomHighlightComponentTest.java | 168 +-
.../solr/handler/component/DebugComponentTest.java | 296 +-
.../component/DistributedDebugComponentTest.java | 189 +-
.../component/DistributedExpandComponentTest.java | 376 +-
.../component/DistributedFacetExistsSmallTest.java | 122 +-
.../component/DistributedFacetPivotLargeTest.java | 1399 ++--
.../DistributedFacetPivotLongTailTest.java | 191 +-
.../DistributedFacetPivotSmallAdvancedTest.java | 251 +-
.../component/DistributedFacetPivotSmallTest.java | 2632 +++++---
.../DistributedFacetPivotWhiteBoxTest.java | 177 +-
.../component/DistributedMLTComponentTest.java | 329 +-
.../DistributedQueryComponentCustomSortTest.java | 212 +-
.../DistributedQueryComponentOptimizationTest.java | 658 +-
.../DistributedQueryElevationComponentTest.java | 132 +-
.../DistributedSpellCheckComponentTest.java | 330 +-
.../component/DistributedSuggestComponentTest.java | 90 +-
.../component/DistributedTermsComponentTest.java | 170 +-
.../component/FacetPivot2CollectionsTest.java | 307 +-
.../handler/component/FacetPivotSmallTest.java | 800 ++-
.../handler/component/InfixSuggestersTest.java | 128 +-
.../handler/component/MockResponseBuilder.java | 60 +-
.../solr/handler/component/MockShardRequest.java | 52 +-
.../handler/component/MockSortSpecBuilder.java | 51 +-
.../component/MoreLikeThisComponentTest.java | 305 +-
.../PhrasesIdentificationComponentTest.java | 982 +--
.../QueryComponentPartialResultsTest.java | 177 +-
.../component/QueryElevationComponentTest.java | 1210 ++--
.../component/ResourceSharingTestComponent.java | 45 +-
.../handler/component/ResponseBuilderTest.java | 5 +-
.../component/ResponseLogComponentTest.java | 60 +-
.../solr/handler/component/SearchHandlerTest.java | 147 +-
.../solr/handler/component/ShardRequestTest.java | 5 +-
.../handler/component/ShardsAllowListTest.java | 173 +-
.../handler/component/SpellCheckComponentTest.java | 623 +-
.../solr/handler/component/StatsComponentTest.java | 2675 ++++----
.../SuggestComponentContextFilterQueryTest.java | 449 +-
.../handler/component/SuggestComponentTest.java | 998 ++-
.../TermVectorComponentDistributedTest.java | 394 +-
.../handler/component/TermVectorComponentTest.java | 600 +-
.../solr/handler/component/TermsComponentTest.java | 846 ++-
.../TestDistributedStatsComponentCardinality.java | 256 +-
.../handler/component/TestExpandComponent.java | 1143 +++-
.../component/TestHttpShardHandlerFactory.java | 81 +-
.../handler/component/TestPivotHelperCode.java | 46 +-
.../component/TestTrackingShardHandlerFactory.java | 53 +-
.../solr/handler/component/UpdateLogCloudTest.java | 73 +-
.../handler/designer/ManagedSchemaDiffTest.java | 25 +-
.../handler/designer/TestSchemaDesignerAPI.java | 192 +-
.../TestSchemaDesignerConfigSetHelper.java | 149 +-
.../designer/TestSchemaDesignerSettingsDAO.java | 83 +-
.../solr/handler/export/TestExportWriter.java | 1516 +++--
.../solr/handler/loader/JavabinLoaderTest.java | 55 +-
.../tagger/EmbeddedSolrNoSerializeTest.java | 50 +-
.../solr/handler/tagger/RandomizedTaggerTest.java | 64 +-
.../apache/solr/handler/tagger/Tagger2Test.java | 121 +-
.../org/apache/solr/handler/tagger/TaggerTest.java | 277 +-
.../apache/solr/handler/tagger/TaggerTestCase.java | 98 +-
.../solr/handler/tagger/TaggingAttributeTest.java | 54 +-
.../handler/tagger/WordLengthTaggingFilter.java | 50 +-
.../tagger/WordLengthTaggingFilterFactory.java | 9 +-
.../solr/handler/tagger/XmlInterpolationTest.java | 57 +-
.../apache/solr/highlight/DummyHighlighter.java | 8 +-
.../solr/highlight/FastVectorHighlighterTest.java | 63 +-
.../solr/highlight/HighlighterConfigTest.java | 23 +-
.../solr/highlight/HighlighterMaxOffsetTest.java | 71 +-
.../org/apache/solr/highlight/HighlighterTest.java | 1410 ++--
.../highlight/HighlighterWithoutStoredIdTest.java | 1 -
.../solr/highlight/TestUnifiedSolrHighlighter.java | 458 +-
.../TestUnifiedSolrHighlighterWithoutStoredId.java | 3 +-
.../apache/solr/index/DummyMergePolicyFactory.java | 9 +-
.../solr/index/TestSlowCompositeReaderWrapper.java | 35 +-
.../solr/index/WrapperMergePolicyFactoryTest.java | 64 +-
.../apache/solr/internal/csv/CSVParserTest.java | 489 +-
.../apache/solr/internal/csv/CSVPrinterTest.java | 94 +-
.../apache/solr/internal/csv/CSVStrategyTest.java | 24 +-
.../org/apache/solr/internal/csv/CSVUtilsTest.java | 224 +-
.../apache/solr/internal/csv/CharBufferTest.java | 312 +-
.../internal/csv/ExtendedBufferedReaderTest.java | 72 +-
.../org/apache/solr/legacy/TestLegacyField.java | 161 +-
.../apache/solr/legacy/TestLegacyFieldReuse.java | 16 +-
.../apache/solr/legacy/TestLegacyNumericUtils.java | 857 ++-
.../org/apache/solr/legacy/TestLegacyTerms.java | 85 +-
.../legacy/TestMultiValuedNumericRangeQuery.java | 53 +-
.../solr/legacy/TestNumericRangeQuery32.java | 405 +-
.../solr/legacy/TestNumericRangeQuery64.java | 414 +-
.../apache/solr/legacy/TestNumericTokenStream.java | 133 +-
.../org/apache/solr/logging/TestLogWatcher.java | 19 +-
.../org/apache/solr/metrics/JvmMetricsTest.java | 110 +-
.../org/apache/solr/metrics/MetricsConfigTest.java | 51 +-
.../solr/metrics/MetricsDisabledCloudTest.java | 42 +-
.../apache/solr/metrics/MockCounterSupplier.java | 4 +-
.../apache/solr/metrics/MockHistogramSupplier.java | 7 +-
.../org/apache/solr/metrics/MockMeterSupplier.java | 4 +-
.../org/apache/solr/metrics/MockTimerSupplier.java | 4 +-
.../solr/metrics/SolrCoreMetricManagerTest.java | 60 +-
.../apache/solr/metrics/SolrMetricManagerTest.java | 97 +-
.../solr/metrics/SolrMetricReporterTest.java | 1 -
.../apache/solr/metrics/SolrMetricTestUtils.java | 49 +-
.../solr/metrics/SolrMetricsIntegrationTest.java | 98 +-
.../solr/metrics/reporters/MockMetricReporter.java | 20 +-
.../reporters/SolrGraphiteReporterTest.java | 29 +-
.../reporters/SolrJmxReporterCloudTest.java | 88 +-
.../metrics/reporters/SolrJmxReporterTest.java | 192 +-
.../metrics/reporters/SolrSlf4jReporterTest.java | 27 +-
.../solr/parser/SolrQueryParserBaseTest.java | 191 +-
.../src/test/org/apache/solr/pkg/TestPackages.java | 1334 ++--
.../solr/request/RegexBytesRefFilterTest.java | 1 -
.../org/apache/solr/request/SimpleFacetsTest.java | 6995 ++++++++++++--------
.../solr/request/SubstringBytesRefFilterTest.java | 6 +-
.../org/apache/solr/request/TestFacetMethods.java | 184 +-
.../test/org/apache/solr/request/TestFaceting.java | 1700 +++--
.../apache/solr/request/TestIntervalFaceting.java | 1034 ++-
.../apache/solr/request/TestRemoteStreaming.java | 40 +-
.../apache/solr/request/TestSolrRequestInfo.java | 91 +-
.../org/apache/solr/request/TestStreamBody.java | 71 +-
.../solr/request/TestUnInvertedFieldException.java | 37 +-
.../org/apache/solr/request/TestWriterPerf.java | 220 +-
.../solr/request/macro/TestMacroExpander.java | 66 +-
.../org/apache/solr/request/macro/TestMacros.java | 86 +-
.../org/apache/solr/response/JSONWriterTest.java | 130 +-
.../org/apache/solr/response/SmileWriterTest.java | 80 +-
.../solr/response/TestBinaryResponseWriter.java | 50 +-
.../solr/response/TestCSVResponseWriter.java | 462 +-
.../solr/response/TestCustomDocTransformer.java | 41 +-
.../solr/response/TestGeoJSONResponseWriter.java | 301 +-
.../solr/response/TestGraphMLResponseWriter.java | 79 +-
.../response/TestJavabinTupleStreamParser.java | 149 +-
.../response/TestPHPSerializedResponseWriter.java | 47 +-
.../org/apache/solr/response/TestPushWriter.java | 92 +-
.../solr/response/TestRawResponseWriter.java | 70 +-
.../apache/solr/response/TestRawTransformer.java | 212 +-
.../solr/response/TestRetrieveFieldsOptimizer.java | 187 +-
.../solr/response/TestSolrQueryResponse.java | 84 +-
.../transform/TestChildDocTransformer.java | 864 ++-
.../TestChildDocTransformerHierarchy.java | 639 +-
.../transform/TestExplainDocTransformer.java | 101 +-
.../transform/TestSubQueryTransformer.java | 1231 ++--
.../TestSubQueryTransformerCrossCore.java | 244 +-
.../transform/TestSubQueryTransformerDistrib.java | 335 +-
.../org/apache/solr/rest/SolrRestletTestBase.java | 27 +-
.../org/apache/solr/rest/TestManagedResource.java | 172 +-
.../solr/rest/TestManagedResourceStorage.java | 75 +-
.../test/org/apache/solr/rest/TestRestManager.java | 101 +-
.../apache/solr/rest/schema/TestBulkSchemaAPI.java | 1183 ++--
.../schema/TestCopyFieldCollectionResource.java | 130 +-
.../schema/TestDynamicFieldCollectionResource.java | 48 +-
.../solr/rest/schema/TestDynamicFieldResource.java | 82 +-
.../rest/schema/TestFieldCollectionResource.java | 61 +-
.../apache/solr/rest/schema/TestFieldResource.java | 110 +-
.../schema/TestFieldTypeCollectionResource.java | 19 +-
.../solr/rest/schema/TestFieldTypeResource.java | 105 +-
.../solr/rest/schema/TestSchemaNameResource.java | 8 +-
.../solr/rest/schema/TestSchemaResource.java | 266 +-
.../rest/schema/TestSchemaSimilarityResource.java | 10 +-
.../rest/schema/TestSchemaVersionResource.java | 9 +-
.../schema/TestSerializedLuceneMatchVersion.java | 59 +-
.../rest/schema/TestUniqueKeyFieldResource.java | 9 +-
.../analysis/TestManagedStopFilterFactory.java | 158 +-
.../analysis/TestManagedSynonymFilterFactory.java | 260 +-
.../TestManagedSynonymGraphFilterFactory.java | 251 +-
.../org/apache/solr/schema/BadCopyFieldTest.java | 35 +-
.../org/apache/solr/schema/BadIndexSchemaTest.java | 151 +-
.../org/apache/solr/schema/BooleanFieldTest.java | 86 +-
.../apache/solr/schema/ChangedSchemaMergeTest.java | 110 +-
.../test/org/apache/solr/schema/CopyFieldTest.java | 325 +-
.../apache/solr/schema/CurrencyFieldTypeTest.java | 995 +--
.../apache/solr/schema/CustomAnalyzerStrField.java | 26 +-
.../test/org/apache/solr/schema/DateFieldTest.java | 26 +-
.../org/apache/solr/schema/DateRangeFieldTest.java | 105 +-
.../apache/solr/schema/DenseVectorFieldTest.java | 757 ++-
.../apache/solr/schema/DocValuesMissingTest.java | 254 +-
.../org/apache/solr/schema/DocValuesMultiTest.java | 645 +-
.../test/org/apache/solr/schema/DocValuesTest.java | 1111 +++-
.../test/org/apache/solr/schema/EnumFieldTest.java | 527 +-
.../solr/schema/ExternalFileFieldSortTest.java | 19 +-
.../solr/schema/IndexSchemaRuntimeFieldTest.java | 34 +-
.../org/apache/solr/schema/IndexSchemaTest.java | 101 +-
.../IntPointPrefixActsAsRangeQueryFieldType.java | 6 +-
.../schema/ManagedSchemaRoundRobinCloudTest.java | 39 +-
.../org/apache/solr/schema/MyCrazyCustomField.java | 10 +-
.../solr/schema/NotRequiredUniqueKeyTest.java | 20 +-
.../org/apache/solr/schema/NumericFieldsTest.java | 108 +-
.../schema/OpenExchangeRatesOrgProviderTest.java | 51 +-
.../test/org/apache/solr/schema/PolyFieldTest.java | 92 +-
.../PreAnalyzedFieldManagedSchemaCloudTest.java | 22 +-
.../apache/solr/schema/PreAnalyzedFieldTest.java | 159 +-
.../apache/solr/schema/PrimitiveFieldTypeTest.java | 58 +-
.../test/org/apache/solr/schema/RankFieldTest.java | 305 +-
.../org/apache/solr/schema/RequiredFieldsTest.java | 197 +-
.../solr/schema/ResolveAnalyzerByNameTest.java | 67 +-
.../apache/solr/schema/SchemaApiFailureTest.java | 30 +-
.../schema/SchemaVersionSpecificBehaviorTest.java | 255 +-
.../org/apache/solr/schema/SchemaWatcherTest.java | 16 +-
.../solr/schema/SpatialRPTFieldTypeTest.java | 191 +-
.../apache/solr/schema/SynonymTokenizerTest.java | 8 +-
.../org/apache/solr/schema/TestBinaryField.java | 58 +-
.../solr/schema/TestBulkSchemaConcurrent.java | 223 +-
.../apache/solr/schema/TestCloudManagedSchema.java | 42 +-
.../apache/solr/schema/TestCloudSchemaless.java | 96 +-
.../org/apache/solr/schema/TestCollationField.java | 195 +-
.../solr/schema/TestCollationFieldDocValues.java | 194 +-
.../org/apache/solr/schema/TestManagedSchema.java | 202 +-
.../apache/solr/schema/TestManagedSchemaAPI.java | 33 +-
.../solr/schema/TestManagedSchemaThreadSafety.java | 90 +-
.../org/apache/solr/schema/TestOmitPositions.java | 46 +-
.../org/apache/solr/schema/TestPointFields.java | 4693 +++++++++----
.../org/apache/solr/schema/TestSchemaField.java | 44 +-
.../org/apache/solr/schema/TestSchemaManager.java | 78 +-
.../solr/schema/TestSchemalessBufferedUpdates.java | 84 +-
.../apache/solr/schema/TestSortableTextField.java | 700 +-
.../test/org/apache/solr/schema/TestTextField.java | 24 +-
.../solr/schema/TestUseDocValuesAsStored.java | 391 +-
.../solr/schema/TestUseDocValuesAsStored2.java | 154 +-
.../TrieIntPrefixActsAsRangeQueryFieldType.java | 6 +-
.../apache/solr/schema/WrappedIntPointField.java | 6 +-
.../apache/solr/schema/WrappedTrieIntField.java | 1 +
.../solr/search/AnalyticsMergeStrategyTest.java | 60 +-
.../org/apache/solr/search/AnalyticsQueryTest.java | 18 +-
.../solr/search/AnalyticsTestQParserPlugin.java | 63 +-
.../search/ApacheLuceneSolrNearQueryBuilder.java | 16 +-
.../solr/search/ChooseOneWordQueryBuilder.java | 9 +-
.../solr/search/CurrencyRangeFacetCloudTest.java | 466 +-
.../org/apache/solr/search/CursorMarkTest.java | 87 +-
.../solr/search/DelayingSearchComponent.java | 17 +-
.../test/org/apache/solr/search/DocSetPerf.java | 89 +-
.../apache/solr/search/GoodbyeQueryBuilder.java | 5 +-
.../org/apache/solr/search/HandyQueryBuilder.java | 7 +-
.../org/apache/solr/search/HelloQueryBuilder.java | 5 +-
.../org/apache/solr/search/LargeFieldTest.java | 47 +-
.../apache/solr/search/MaxScoreCollectorTest.java | 28 +-
.../org/apache/solr/search/MergeStrategyTest.java | 154 +-
.../apache/solr/search/MockSearchComponent.java | 9 +-
.../org/apache/solr/search/QueryEqualityTest.java | 1323 ++--
.../org/apache/solr/search/QueryParsingTest.java | 102 +-
.../apache/solr/search/RankQParserPluginTest.java | 417 +-
.../test/org/apache/solr/search/RankQueryTest.java | 44 +-
.../apache/solr/search/RankQueryTestPlugin.java | 304 +-
.../org/apache/solr/search/ReturnFieldsTest.java | 548 +-
.../search/SignificantTermsQParserPluginTest.java | 223 +-
.../apache/solr/search/SolrIndexSearcherTest.java | 522 +-
.../apache/solr/search/SortSpecParsingTest.java | 77 +-
.../org/apache/solr/search/SpatialFilterTest.java | 182 +-
.../solr/search/TestAddFieldRealTimeGet.java | 41 +-
.../org/apache/solr/search/TestBlockCollapse.java | 1655 +++--
.../org/apache/solr/search/TestCaffeineCache.java | 130 +-
.../solr/search/TestCancellableCollector.java | 2 +-
.../solr/search/TestCollapseQParserPlugin.java | 1595 +++--
.../search/TestComplexPhraseLeadingWildcard.java | 89 +-
.../search/TestComplexPhraseQParserPlugin.java | 508 +-
.../org/apache/solr/search/TestComponentsName.java | 59 +-
.../org/apache/solr/search/TestCustomSort.java | 366 +-
.../test/org/apache/solr/search/TestDocSet.java | 206 +-
.../solr/search/TestElisionMultitermQuery.java | 5 +-
.../solr/search/TestExtendedDismaxParser.java | 3976 ++++++-----
.../apache/solr/search/TestFieldSortValues.java | 26 +-
.../apache/solr/search/TestFilteredDocIdSet.java | 181 +-
.../test/org/apache/solr/search/TestFiltering.java | 401 +-
.../solr/search/TestFoldingMultitermQuery.java | 244 +-
.../solr/search/TestGraphTermsQParserPlugin.java | 69 +-
.../apache/solr/search/TestHashQParserPlugin.java | 165 +-
.../org/apache/solr/search/TestIndexSearcher.java | 261 +-
.../org/apache/solr/search/TestInitQParser.java | 13 +-
.../search/TestLegacyNumericRangeQueryBuilder.java | 54 +-
.../solr/search/TestMaxScoreQueryParser.java | 82 +-
.../org/apache/solr/search/TestMinHashQParser.java | 183 +-
.../org/apache/solr/search/TestMissingGroups.java | 192 +-
.../apache/solr/search/TestMultiWordSynonyms.java | 249 +-
.../apache/solr/search/TestNoOpRegenerator.java | 46 +-
...estOverriddenPrefixQueryForCustomFieldType.java | 43 +-
.../solr/search/TestPayloadCheckQParserPlugin.java | 103 +-
.../solr/search/TestPayloadScoreQParserPlugin.java | 83 +-
.../apache/solr/search/TestPseudoReturnFields.java | 1127 ++--
.../org/apache/solr/search/TestQueryTypes.java | 739 ++-
.../org/apache/solr/search/TestQueryUtils.java | 327 +-
.../test/org/apache/solr/search/TestRTGBase.java | 26 +-
.../search/TestRandomCollapseQParserPlugin.java | 216 +-
.../org/apache/solr/search/TestRangeQuery.java | 653 +-
.../solr/search/TestReRankQParserPlugin.java | 724 +-
.../org/apache/solr/search/TestRealTimeGet.java | 1109 ++--
.../test/org/apache/solr/search/TestRecovery.java | 1339 ++--
.../test/org/apache/solr/search/TestReload.java | 45 +-
.../org/apache/solr/search/TestReloadDeadlock.java | 201 +-
.../org/apache/solr/search/TestSearchPerf.java | 132 +-
.../org/apache/solr/search/TestSearcherReuse.java | 103 +-
.../solr/search/TestSimpleQParserPlugin.java | 560 +-
.../org/apache/solr/search/TestSmileRequest.java | 42 +-
.../org/apache/solr/search/TestSolr4Spatial.java | 555 +-
.../org/apache/solr/search/TestSolr4Spatial2.java | 388 +-
.../org/apache/solr/search/TestSolrCachePerf.java | 97 +-
.../org/apache/solr/search/TestSolrCoreParser.java | 88 +-
.../apache/solr/search/TestSolrFieldCacheBean.java | 32 +-
.../src/test/org/apache/solr/search/TestSolrJ.java | 82 +-
.../apache/solr/search/TestSolrQueryParser.java | 2164 +++---
.../src/test/org/apache/solr/search/TestSort.java | 265 +-
.../apache/solr/search/TestStandardQParsers.java | 52 +-
.../org/apache/solr/search/TestStressLucene.java | 444 +-
.../org/apache/solr/search/TestStressRecovery.java | 454 +-
.../org/apache/solr/search/TestStressReorder.java | 463 +-
.../apache/solr/search/TestStressUserVersions.java | 409 +-
.../org/apache/solr/search/TestStressVersions.java | 353 +-
.../solr/search/TestSurroundQueryParser.java | 87 +-
.../org/apache/solr/search/TestTaskManagement.java | 373 +-
.../apache/solr/search/TestTermQParserPlugin.java | 130 +-
.../apache/solr/search/TestTermsQParserPlugin.java | 197 +-
.../test/org/apache/solr/search/TestTrieFacet.java | 158 +-
.../apache/solr/search/TestValueSourceCache.java | 53 +-
.../apache/solr/search/TestXmlQParserPlugin.java | 10 +-
...stributedFacetSimpleRefinementLongTailTest.java | 373 +-
.../solr/search/facet/RangeFacetCloudTest.java | 964 ++-
.../search/facet/SpatialHeatmapFacetsTest.java | 465 +-
.../search/facet/TestCloudJSONFacetJoinDomain.java | 724 +-
.../solr/search/facet/TestCloudJSONFacetSKG.java | 695 +-
.../search/facet/TestCloudJSONFacetSKGEquiv.java | 1047 +--
.../solr/search/facet/TestJsonFacetErrors.java | 563 +-
.../solr/search/facet/TestJsonFacetRefinement.java | 2504 ++++---
.../apache/solr/search/facet/TestJsonFacets.java | 6286 +++++++++++-------
.../search/facet/TestJsonFacetsStatsParsing.java | 119 +-
.../facet/TestJsonFacetsWithNestedObjects.java | 653 +-
.../solr/search/facet/TestJsonRangeFacets.java | 555 +-
.../solr/search/function/AggValueSourceTest.java | 11 +-
.../solr/search/function/SortByFunctionTest.java | 357 +-
.../solr/search/function/TestFunctionQuery.java | 1348 ++--
.../function/TestMinMaxOnMultiValuedField.java | 967 +--
.../apache/solr/search/function/TestOrdValues.java | 119 +-
.../search/function/TestSortByMinMaxFunction.java | 11 +-
.../function/distance/DistanceFunctionTest.java | 396 +-
.../org/apache/solr/search/join/BJQParserTest.java | 575 +-
.../search/join/CrossCollectionJoinQueryTest.java | 153 +-
.../apache/solr/search/join/GraphQueryTest.java | 168 +-
.../search/join/InvalidConfigJoinQueryTest.java | 14 +-
.../solr/search/join/TestCloudNestedDocsSort.java | 170 +-
.../solr/search/join/TestNestedDocsSort.java | 231 +-
.../solr/search/join/TestScoreJoinQPNoScore.java | 397 +-
.../solr/search/join/TestScoreJoinQPScore.java | 335 +-
.../join/another/BJQFilterAccessibleTest.java | 16 +-
.../apache/solr/search/json/TestJsonRequest.java | 1075 +--
.../solr/search/mlt/CloudMLTQParserTest.java | 211 +-
.../solr/search/mlt/SimpleMLTQParserTest.java | 122 +-
.../apache/solr/search/neural/KnnQParserTest.java | 597 +-
.../similarities/BaseSimilarityTestCase.java | 18 +-
.../similarities/TestBM25SimilarityFactory.java | 10 +-
.../similarities/TestBooleanSimilarityFactory.java | 6 +-
.../similarities/TestClassicSimilarityFactory.java | 9 +-
.../similarities/TestDFISimilarityFactory.java | 13 +-
.../similarities/TestDFRSimilarityFactory.java | 12 +-
.../similarities/TestIBSimilarityFactory.java | 10 +-
.../TestLMDirichletSimilarityFactory.java | 10 +-
.../TestLMJelinekMercerSimilarityFactory.java | 10 +-
.../TestNonDefinedSimilarityFactory.java | 9 +-
.../similarities/TestPerFieldSimilarity.java | 27 +-
.../TestPerFieldSimilarityWithDefaultOverride.java | 17 +-
.../TestSweetSpotSimilarityFactory.java | 82 +-
.../solr/search/stats/TestBaseStatsCache.java | 10 +-
.../solr/search/stats/TestDefaultStatsCache.java | 41 +-
.../apache/solr/search/stats/TestDistribIDF.java | 64 +-
.../solr/search/stats/TestExactStatsCache.java | 12 +-
.../solr/security/AllowListUrlCheckerTest.java | 13 +-
.../solr/security/AuditLoggerIntegrationTest.java | 371 +-
.../solr/security/AuditLoggerPluginTest.java | 199 +-
.../AuthWithShardHandlerFactoryOverrideTest.java | 63 +-
.../BaseTestRuleBasedAuthorizationPlugin.java | 874 ++-
.../solr/security/BasicAuthIntegrationTest.java | 332 +-
.../solr/security/BasicAuthOnSingleNodeTest.java | 66 +-
.../solr/security/BasicAuthStandaloneTest.java | 105 +-
.../solr/security/CallbackAuditLoggerPlugin.java | 30 +-
.../apache/solr/security/CertAuthPluginTest.java | 83 +-
.../solr/security/MockAuditLoggerPlugin.java | 7 +-
.../solr/security/MockAuthenticationPlugin.java | 41 +-
.../solr/security/MockAuthorizationPlugin.java | 14 +-
.../apache/solr/security/MultiAuthPluginTest.java | 178 +-
.../security/MultiDestinationAuditLoggerTest.java | 21 +-
.../security/PKIAuthenticationIntegrationTest.java | 78 +-
.../solr/security/PrincipalWithUserRoles.java | 20 +-
.../security/SolrLogAuditLoggerPluginTest.java | 15 +-
.../solr/security/TestAuthorizationFramework.java | 35 +-
...stExternalRoleRuleBasedAuthorizationPlugin.java | 15 +-
.../solr/security/TestPKIAuthenticationPlugin.java | 119 +-
.../security/TestSha256AuthenticationProvider.java | 33 +-
.../org/apache/solr/servlet/CacheHeaderTest.java | 113 +-
.../apache/solr/servlet/CacheHeaderTestBase.java | 75 +-
.../solr/servlet/DirectSolrConnectionTest.java | 64 +-
.../apache/solr/servlet/HttpSolrCallCloudTest.java | 41 +-
.../org/apache/solr/servlet/NoCacheHeaderTest.java | 73 +-
.../apache/solr/servlet/ResponseHeaderTest.java | 31 +-
.../apache/solr/servlet/SecurityHeadersTest.java | 53 +-
.../apache/solr/servlet/SolrRequestParserTest.java | 435 +-
.../solr/servlet/TestRequestRateLimiter.java | 121 +-
.../spelling/ConjunctionSolrSpellCheckerTest.java | 50 +-
.../solr/spelling/DirectSolrSpellCheckerTest.java | 125 +-
.../solr/spelling/FileBasedSpellCheckerTest.java | 157 +-
.../solr/spelling/IndexBasedSpellCheckerTest.java | 381 +-
.../apache/solr/spelling/SimpleQueryConverter.java | 12 +-
.../solr/spelling/SpellCheckCollatorTest.java | 585 +-
.../SpellCheckCollatorWithCollapseTest.java | 64 +-
.../spelling/SpellPossibilityIteratorTest.java | 88 +-
.../solr/spelling/SpellingQueryConverterTest.java | 159 +-
.../spelling/TestSuggestSpellingConverter.java | 49 +-
.../spelling/WordBreakSolrSpellCheckerTest.java | 461 +-
.../suggest/RandomTestDictionaryFactory.java | 16 +-
.../solr/spelling/suggest/SuggesterTest.java | 99 +-
.../suggest/TestAnalyzeInfixSuggestions.java | 211 +-
.../spelling/suggest/TestAnalyzedSuggestions.java | 38 +-
.../suggest/TestBlendedInfixSuggestions.java | 139 +-
.../spelling/suggest/TestFileDictionaryLookup.java | 129 +-
.../spelling/suggest/TestFreeTextSuggestions.java | 67 +-
.../suggest/TestFuzzyAnalyzedSuggestions.java | 132 +-
.../TestHighFrequencyDictionaryFactory.java | 152 +-
.../spelling/suggest/TestPhraseSuggestions.java | 20 +-
.../apache/solr/uninverting/TestDocTermOrds.java | 257 +-
.../uninverting/TestDocTermOrdsUninvertLimit.java | 60 +-
.../apache/solr/uninverting/TestFieldCache.java | 397 +-
.../solr/uninverting/TestFieldCacheReopen.java | 29 +-
.../solr/uninverting/TestFieldCacheSort.java | 563 +-
.../solr/uninverting/TestFieldCacheSortRandom.java | 117 +-
.../uninverting/TestFieldCacheVsDocValues.java | 128 +-
.../uninverting/TestFieldCacheWithThreads.java | 189 +-
.../solr/uninverting/TestLegacyFieldCache.java | 262 +-
.../solr/uninverting/TestNumericTerms32.java | 91 +-
.../solr/uninverting/TestNumericTerms64.java | 92 +-
.../solr/uninverting/TestUninvertingReader.java | 189 +-
.../org/apache/solr/update/AddBlockUpdateTest.java | 728 +-
.../solr/update/AnalysisErrorHandlingTest.java | 19 +-
.../solr/update/DataDrivenBlockJoinTest.java | 52 +-
.../solr/update/DeleteByIdWithRouterFieldTest.java | 292 +-
.../solr/update/DirectUpdateHandlerTest.java | 293 +-
.../apache/solr/update/DocumentBuilderTest.java | 228 +-
.../apache/solr/update/MaxSizeAutoCommitTest.java | 186 +-
.../solr/update/MockStreamingSolrClients.java | 28 +-
.../apache/solr/update/MockingHttp2SolrClient.java | 32 +-
.../test/org/apache/solr/update/PeerSyncTest.java | 411 +-
.../solr/update/PeerSyncWithBufferUpdatesTest.java | 79 +-
.../PeerSyncWithIndexFingerprintCachingTest.java | 69 +-
...ncWithLeaderAndIndexFingerprintCachingTest.java | 17 +-
.../apache/solr/update/PeerSyncWithLeaderTest.java | 25 +-
.../test/org/apache/solr/update/RootFieldTest.java | 59 +-
.../org/apache/solr/update/SoftAutoCommitTest.java | 388 +-
.../apache/solr/update/SolrCmdDistributorTest.java | 538 +-
.../apache/solr/update/SolrIndexConfigTest.java | 119 +-
.../apache/solr/update/SolrIndexMetricsTest.java | 47 +-
.../apache/solr/update/SolrIndexSplitterTest.java | 239 +-
.../solr/update/TestAtomicUpdateErrorCases.java | 47 +-
.../solr/update/TestExceedMaxTermLength.java | 80 +-
.../update/TestInPlaceUpdateWithRouteField.java | 108 +-
.../solr/update/TestInPlaceUpdatesDistrib.java | 1045 ++-
.../update/TestInPlaceUpdatesRequiredField.java | 17 +-
.../solr/update/TestInPlaceUpdatesStandalone.java | 1164 ++--
.../solr/update/TestIndexingPerformance.java | 98 +-
.../solr/update/TestNestedUpdateProcessor.java | 607 +-
.../test/org/apache/solr/update/TestUpdate.java | 260 +-
.../org/apache/solr/update/TransactionLogTest.java | 11 +-
.../test/org/apache/solr/update/UpdateLogTest.java | 181 +-
.../org/apache/solr/update/UpdateParamsTest.java | 41 +-
.../org/apache/solr/update/VersionInfoTest.java | 59 +-
.../AbstractAtomicUpdatesMultivalueTestBase.java | 241 +-
.../AddSchemaFieldsUpdateProcessorFactoryTest.java | 212 +-
.../update/processor/AtomicUpdateJavabinTest.java | 181 +-
.../AtomicUpdateProcessorFactoryTest.java | 232 +-
.../solr/update/processor/AtomicUpdatesTest.java | 870 ++-
.../CategoryRoutedAliasUpdateProcessorTest.java | 352 +-
.../ClassificationUpdateProcessorFactoryTest.java | 48 +-
...assificationUpdateProcessorIntegrationTest.java | 286 +-
.../ClassificationUpdateProcessorTest.java | 667 +-
.../CloneFieldUpdateProcessorFactoryTest.java | 351 +-
.../processor/CustomUpdateRequestProcessor.java | 8 +-
.../CustomUpdateRequestProcessorFactory.java | 17 +-
.../processor/DefaultValueUpdateProcessorTest.java | 86 +-
.../DimensionalRoutedAliasUpdateProcessorTest.java | 432 +-
.../processor/DistributedUpdateProcessorTest.java | 129 +-
.../DocExpirationUpdateProcessorFactoryTest.java | 201 +-
.../FieldMutatingUpdateProcessorTest.java | 920 +--
...reCommitOptimizeUpdateProcessorFactoryTest.java | 30 +-
.../IgnoreLargeDocumentProcessorFactoryTest.java | 52 +-
.../JavaBinAtomicUpdateMultivalueTest.java | 1 -
.../update/processor/NestedAtomicUpdateTest.java | 922 ++-
.../ParsingFieldUpdateProcessorsTest.java | 693 +-
.../processor/PreAnalyzedUpdateProcessorTest.java | 107 +-
.../processor/RecordingUpdateProcessorFactory.java | 55 +-
.../update/processor/RegexBoostProcessorTest.java | 35 +-
.../processor/RoutedAliasUpdateProcessorTest.java | 209 +-
.../SignatureUpdateProcessorFactoryTest.java | 115 +-
.../SkipExistingDocumentsProcessorFactoryTest.java | 68 +-
.../processor/TemplateUpdateProcessorTest.java | 56 +-
.../update/processor/TestCloudDeduplication.java | 83 +-
.../processor/TestDocBasedVersionConstraints.java | 828 ++-
.../processor/TestPartialUpdateDeduplication.java | 6 +-
.../TimeRoutedAliasUpdateProcessorTest.java | 1085 +--
.../processor/TolerantUpdateProcessorTest.java | 396 +-
.../processor/TrackingUpdateProcessorFactory.java | 59 +-
.../update/processor/URLClassifyProcessorTest.java | 139 +-
.../processor/UUIDUpdateProcessorFallbackTest.java | 117 +-
.../UniqFieldsUpdateProcessorFactoryTest.java | 84 +-
.../UpdateRequestProcessorFactoryTest.java | 165 +-
.../processor/XMLAtomicUpdateMultivalueTest.java | 1 -
.../test/org/apache/solr/util/AuthToolTest.java | 34 +-
.../src/test/org/apache/solr/util/BitSetPerf.java | 109 +-
.../org/apache/solr/util/CircularListTest.java | 13 +-
.../org/apache/solr/util/DateMathParserTest.java | 167 +-
.../test/org/apache/solr/util/DynamicMapsTest.java | 11 +-
.../test/org/apache/solr/util/FileUtilsTest.java | 6 +-
.../src/test/org/apache/solr/util/LongSetTest.java | 2 -
.../test/org/apache/solr/util/ModuleUtilsTest.java | 18 +-
.../org/apache/solr/util/OrderedExecutorTest.java | 141 +-
.../test/org/apache/solr/util/PrimUtilsTest.java | 44 +-
.../org/apache/solr/util/SimplePostToolTest.java | 145 +-
.../org/apache/solr/util/SolrCliUptimeTest.java | 27 +-
.../org/apache/solr/util/SolrLogPostToolTest.java | 203 +-
.../org/apache/solr/util/SolrPluginUtilsTest.java | 332 +-
.../org/apache/solr/util/TestCircuitBreaker.java | 137 +-
.../test/org/apache/solr/util/TestExportTool.java | 102 +-
.../org/apache/solr/util/TestFastOutputStream.java | 20 +-
.../apache/solr/util/TestMaxTokenLenTokenizer.java | 151 +-
.../test/org/apache/solr/util/TestRTimerTree.java | 8 +-
.../org/apache/solr/util/TestSafeXMLParsing.java | 112 +-
.../apache/solr/util/TestSolrCLIRunExample.java | 310 +-
.../solr/util/TestSolrJacksonAnnotation.java | 31 +-
.../test/org/apache/solr/util/TestSolrVersion.java | 11 +-
.../org/apache/solr/util/TestSystemIdResolver.java | 124 +-
.../org/apache/solr/util/TestTestInjection.java | 24 +-
.../src/test/org/apache/solr/util/TestUtils.java | 415 +-
.../org/apache/solr/util/TimeZoneUtilsTest.java | 127 +-
.../util/configuration/SSLConfigurationsTest.java | 33 +-
.../SSLCredentialProviderFactoryTest.java | 23 +-
.../providers/EnvSSLCredentialProviderTest.java | 27 +-
.../SysPropSSLCredentialProviderTest.java | 28 +-
.../BigEndianAscendingWordDeserializerTest.java | 305 +-
.../hll/BigEndianAscendingWordSerializerTest.java | 595 +-
.../org/apache/solr/util/hll/BitVectorTest.java | 255 +-
.../org/apache/solr/util/hll/ExplicitHLLTest.java | 385 +-
.../test/org/apache/solr/util/hll/FullHLLTest.java | 614 +-
.../apache/solr/util/hll/HLLSerializationTest.java | 133 +-
.../test/org/apache/solr/util/hll/HLLUtilTest.java | 39 +-
.../solr/util/hll/IntegrationTestGenerator.java | 1232 ++--
.../org/apache/solr/util/hll/NumberUtilTest.java | 141 +-
.../solr/util/hll/ProbabilisticTestUtil.java | 93 +-
.../org/apache/solr/util/hll/SparseHLLTest.java | 960 +--
.../apache/solr/util/stats/MetricUtilsTest.java | 175 +-
.../solr/util/tracing/TestDistributedTracing.java | 58 +-
.../solr/util/tracing/TestHttpServletCarrier.java | 29 +-
918 files changed, 135280 insertions(+), 89709 deletions(-)
diff --git a/gradle/validation/spotless.gradle b/gradle/validation/spotless.gradle
index 3f72246..1da1b5b 100644
--- a/gradle/validation/spotless.gradle
+++ b/gradle/validation/spotless.gradle
@@ -45,7 +45,7 @@ configure(project(":solr").subprojects) { prj ->
// Exclude certain files (generated ones, mostly).
switch (project.path) {
case ":solr:core":
- targetExclude "src/**/*.java"
+ targetExclude "src/java/**/*.java"
break
case ":solr:solrj":
targetExclude "src/test/org/apache/solr/client/solrj/io/stream/*.java"
diff --git a/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java b/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java
index 49c6351..f701968 100644
--- a/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java
+++ b/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java
@@ -16,6 +16,13 @@
*/
package org.apache.solr;
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
@@ -28,22 +35,14 @@ import org.apache.solr.core.SolrCore;
import org.junit.AfterClass;
import org.junit.BeforeClass;
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
public class AnalysisAfterCoreReloadTest extends SolrTestCaseJ4 {
-
+
private static String tmpSolrHome;
int port = 0;
static final String context = "/solr";
static final String collection = "collection1";
-
+
@BeforeClass
public static void beforeClass() throws Exception {
tmpSolrHome = createTempDir().toFile().getAbsolutePath();
@@ -52,72 +51,70 @@ public class AnalysisAfterCoreReloadTest extends SolrTestCaseJ4 {
}
@AfterClass
- public static void AfterClass() throws Exception {
-
- }
-
+ public static void AfterClass() throws Exception {}
+
public void testStopwordsAfterCoreReload() throws Exception {
SolrInputDocument doc = new SolrInputDocument();
- doc.setField( "id", "42" );
- doc.setField( "teststop", "terma stopworda stopwordb stopwordc" );
-
+ doc.setField("id", "42");
+ doc.setField("teststop", "terma stopworda stopwordb stopwordc");
+
// default stopwords - stopworda and stopwordb
-
+
UpdateRequest up = new UpdateRequest();
up.setAction(ACTION.COMMIT, true, true);
- up.add( doc );
- up.process( getSolrCore() );
+ up.add(doc);
+ up.process(getSolrCore());
SolrQuery q = new SolrQuery();
- QueryRequest r = new QueryRequest( q );
- q.setQuery( "teststop:terma" );
- assertEquals( 1, r.process( getSolrCore() ).getResults().size() );
+ QueryRequest r = new QueryRequest(q);
+ q.setQuery("teststop:terma");
+ assertEquals(1, r.process(getSolrCore()).getResults().size());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:stopworda" );
- assertEquals( 0, r.process( getSolrCore() ).getResults().size() );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:stopworda");
+ assertEquals(0, r.process(getSolrCore()).getResults().size());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:stopwordb" );
- assertEquals( 0, r.process( getSolrCore() ).getResults().size() );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:stopwordb");
+ assertEquals(0, r.process(getSolrCore()).getResults().size());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:stopwordc" );
- assertEquals( 1, r.process( getSolrCore() ).getResults().size() );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:stopwordc");
+ assertEquals(1, r.process(getSolrCore()).getResults().size());
// overwrite stopwords file with stopword list ["stopwordc"] and reload the core
overwriteStopwords("stopwordc\n");
h.getCoreContainer().reload(collection);
- up.process( getSolrCore() );
+ up.process(getSolrCore());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:terma" );
- assertEquals( 1, r.process( getSolrCore() ).getResults().size() );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:terma");
+ assertEquals(1, r.process(getSolrCore()).getResults().size());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:stopworda" );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:stopworda");
// stopworda is no longer a stopword
- assertEquals( 1, r.process( getSolrCore() ).getResults().size() );
+ assertEquals(1, r.process(getSolrCore()).getResults().size());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:stopwordb" );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:stopwordb");
// stopwordb is no longer a stopword
- assertEquals( 1, r.process( getSolrCore() ).getResults().size() );
+ assertEquals(1, r.process(getSolrCore()).getResults().size());
q = new SolrQuery();
- r = new QueryRequest( q );
- q.setQuery( "teststop:stopwordc" );
+ r = new QueryRequest(q);
+ q.setQuery("teststop:stopwordc");
// stopwordc should be a stopword
- assertEquals( 0, r.process( getSolrCore() ).getResults().size() );
+ assertEquals(0, r.process(getSolrCore()).getResults().size());
}
-
+
private void overwriteStopwords(String stopwords) throws IOException {
try (SolrCore core = h.getCoreContainer().getCore(collection)) {
Path configPath = core.getResourceLoader().getConfigPath();
@@ -125,7 +122,7 @@ public class AnalysisAfterCoreReloadTest extends SolrTestCaseJ4 {
Files.write(configPath.resolve("stopwords.txt"), stopwords.getBytes(StandardCharsets.UTF_8));
}
}
-
+
@Override
public void tearDown() throws Exception {
Path configPath;
@@ -142,5 +139,4 @@ public class AnalysisAfterCoreReloadTest extends SolrTestCaseJ4 {
protected SolrClient getSolrCore() {
return new EmbeddedSolrServer(h.getCoreContainer(), collection);
}
-
}
diff --git a/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java b/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
index 55946f3..39ec3d6 100644
--- a/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
+++ b/solr/core/src/test/org/apache/solr/BasicFunctionalityTest.java
@@ -16,8 +16,8 @@
*/
package org.apache.solr;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Metric;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringWriter;
@@ -27,13 +27,12 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-
-import com.codahale.metrics.Gauge;
-import com.codahale.metrics.Metric;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
-import org.apache.lucene.misc.document.LazyDocument;
import org.apache.lucene.index.IndexableField;
+import org.apache.lucene.misc.document.LazyDocument;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
@@ -59,17 +58,18 @@ import org.junit.BeforeClass;
import org.junit.Test;
/**
- * Tests some basic functionality of Solr while demonstrating good
- * Best Practices for using SolrTestCaseJ4
+ * Tests some basic functionality of Solr while demonstrating good Best Practices for using
+ * SolrTestCaseJ4
*/
public class BasicFunctionalityTest extends SolrTestCaseJ4 {
-
- public String getCoreName() { return "basic"; }
+ public String getCoreName() {
+ return "basic";
+ }
@BeforeClass
public static void beforeTests() throws Exception {
- initCore("solrconfig.xml","schema.xml");
+ initCore("solrconfig.xml", "schema.xml");
}
// tests the performance of dynamic field creation and
// field property testing.
@@ -101,23 +101,22 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
System.out.println("ret=" + ret + " time="+ (end-start));
}
***/
-
+
@Test
public void testIgnoredFields() throws Exception {
- lrf.args.put(CommonParams.VERSION,"2.2");
- assertU("adding doc with ignored field",
- adoc("id", "42", "foo_ignored", "blah blah"));
- assertU("commit",
- commit());
-
- // :TODO: the behavior of querying on an unindexed field should be better specified in the future.
- assertQ("query with ignored field",
- req("bar_ignored:yo id:42")
- ,"//*[@numFound='1']"
- ,"//str[@name='id'][.='42']"
- );
+ lrf.args.put(CommonParams.VERSION, "2.2");
+ assertU("adding doc with ignored field", adoc("id", "42", "foo_ignored", "blah blah"));
+ assertU("commit", commit());
+
+ // :TODO: the behavior of querying on an unindexed field should be better specified in the
+ // future.
+ assertQ(
+ "query with ignored field",
+ req("bar_ignored:yo id:42"),
+ "//*[@numFound='1']",
+ "//str[@name='id'][.='42']");
}
-
+
@Test
public void testSomeStuff() throws Exception {
clearIndex();
@@ -134,215 +133,161 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
assertTrue(metrics.containsKey("CORE.coreName"));
assertTrue(metrics.containsKey("CORE.refCount"));
@SuppressWarnings({"unchecked"})
- Gauge<Number> g = (Gauge<Number>)metrics.get("CORE.refCount");
+ Gauge<Number> g = (Gauge<Number>) metrics.get("CORE.refCount");
assertTrue(g.getValue().intValue() > 0);
- lrf.args.put(CommonParams.VERSION,"2.2");
- assertQ("test query on empty index",
- req("qlkciyopsbgzyvkylsjhchghjrdf")
- ,"//result[@numFound='0']"
- );
+ lrf.args.put(CommonParams.VERSION, "2.2");
+ assertQ(
+ "test query on empty index",
+ req("qlkciyopsbgzyvkylsjhchghjrdf"),
+ "//result[@numFound='0']");
// test escaping of ";"
- assertU("deleting 42 for no reason at all",
- delI("42"));
- assertU("adding doc#42",
- adoc("id", "42", "val_s", "aa;bb"));
- assertU("does commit work?",
- commit());
-
- assertQ("backslash escaping semicolon",
- req("id:42 AND val_s:aa\\;bb")
- ,"//*[@numFound='1']"
- ,"//str[@name='id'][.='42']"
- );
-
- assertQ("quote escaping semicolon",
- req("id:42 AND val_s:\"aa;bb\"")
- ,"//*[@numFound='1']"
- ,"//str[@name='id'][.='42']"
- );
-
- assertQ("no escaping semicolon",
- req("id:42 AND val_s:aa")
- ,"//*[@numFound='0']"
- );
+ assertU("deleting 42 for no reason at all", delI("42"));
+ assertU("adding doc#42", adoc("id", "42", "val_s", "aa;bb"));
+ assertU("does commit work?", commit());
+
+ assertQ(
+ "backslash escaping semicolon",
+ req("id:42 AND val_s:aa\\;bb"),
+ "//*[@numFound='1']",
+ "//str[@name='id'][.='42']");
+
+ assertQ(
+ "quote escaping semicolon",
+ req("id:42 AND val_s:\"aa;bb\""),
+ "//*[@numFound='1']",
+ "//str[@name='id'][.='42']");
+
+ assertQ("no escaping semicolon", req("id:42 AND val_s:aa"), "//*[@numFound='0']");
assertU(delI("42"));
assertU(commit());
- assertQ(req("id:42")
- ,"//*[@numFound='0']"
- );
+ assertQ(req("id:42"), "//*[@numFound='0']");
// test overwrite default of true
assertU(adoc("id", "42", "val_s", "AAA"));
assertU(adoc("id", "42", "val_s", "BBB"));
assertU(commit());
- assertQ(req("id:42")
- ,"//*[@numFound='1']"
- ,"//str[.='BBB']"
- );
+ assertQ(req("id:42"), "//*[@numFound='1']", "//str[.='BBB']");
assertU(adoc("id", "42", "val_s", "CCC"));
assertU(adoc("id", "42", "val_s", "DDD"));
assertU(commit());
- assertQ(req("id:42")
- ,"//*[@numFound='1']"
- ,"//str[.='DDD']"
- );
+ assertQ(req("id:42"), "//*[@numFound='1']", "//str[.='DDD']");
// test deletes
- String [] adds = new String[] {
- add( doc("id","101"), "overwrite", "true" ),
- add( doc("id","101"), "overwrite", "true" ),
- add( doc("id","105"), "overwrite", "false" ),
- add( doc("id","102"), "overwrite", "true" ),
- add( doc("id","103"), "overwrite", "false" ),
- add( doc("id","101"), "overwrite", "true" ),
- };
+ String[] adds =
+ new String[] {
+ add(doc("id", "101"), "overwrite", "true"),
+ add(doc("id", "101"), "overwrite", "true"),
+ add(doc("id", "105"), "overwrite", "false"),
+ add(doc("id", "102"), "overwrite", "true"),
+ add(doc("id", "103"), "overwrite", "false"),
+ add(doc("id", "101"), "overwrite", "true"),
+ };
for (String a : adds) {
assertU(a, a);
}
assertU(commit());
// test maxint
- assertQ(req("q","id:[100 TO 110]", "rows","2147483647")
- ,"//*[@numFound='4']"
- );
+ assertQ(req("q", "id:[100 TO 110]", "rows", "2147483647"), "//*[@numFound='4']");
// test big limit
- assertQ(req("q","id:[100 TO 111]", "rows","1147483647")
- ,"//*[@numFound='4']"
- );
+ assertQ(req("q", "id:[100 TO 111]", "rows", "1147483647"), "//*[@numFound='4']");
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='4']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='4']");
assertU(delI("102"));
assertU(commit());
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='3']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='3']");
assertU(delI("105"));
assertU(commit());
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='2']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='2']");
assertU(delQ("id:[100 TO 110]"));
assertU(commit());
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='0']"
- );
-
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='0']");
+
assertU(BaseTestHarness.simpleTag("rollback"));
assertU(commit());
}
-
- /**
- * verify that delete by query works with the QParser framework and
- * pure negative queries
- */
+ /** verify that delete by query works with the QParser framework and pure negative queries */
public void testNonTrivialDeleteByQuery() throws Exception {
clearIndex();
-
+
// setup
- assertU( add(doc("id","101", "text", "red apple" )) );
- assertU( add(doc("id","102", "text", "purple grape" )) );
- assertU( add(doc("id","103", "text", "green grape" )) );
- assertU( add(doc("id","104", "text", "green pear" )) );
- assertU( add(doc("id","105", "text", "yellow banana" )) );
- assertU( add(doc("id","106", "text", "red cherry" )) );
+ assertU(add(doc("id", "101", "text", "red apple")));
+ assertU(add(doc("id", "102", "text", "purple grape")));
+ assertU(add(doc("id", "103", "text", "green grape")));
+ assertU(add(doc("id", "104", "text", "green pear")));
+ assertU(add(doc("id", "105", "text", "yellow banana")));
+ assertU(add(doc("id", "106", "text", "red cherry")));
// sanity checks
assertU(commit());
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='6']"
- );
- assertQ(req("*:*")
- ,"//*[@numFound='6']"
- );
- assertQ(req("text:red")
- ,"//*[@numFound='2']"
- );
- assertQ(req("-text:red")
- ,"//*[@numFound='4']"
- );
- assertQ(req("text:grape")
- ,"//*[@numFound='2']"
- );
- assertQ(req("-text:grape")
- ,"//*[@numFound='4']"
- );
- assertQ(req("-text:red -text:grape")
- ,"//*[@numFound='2']"
- );
- assertQ(req("{!lucene q.op=AND df=text}grape green")
- ,"//*[@numFound='1']"
- ,"//str[@name='id'][.='103']"
- );
- assertQ(req("-_val_:\"{!lucene q.op=AND df=text}grape green\"")
- ,"//*[@numFound='5']"
- ,"//str[@name='id'][.='101']"
- ,"//str[@name='id'][.='102']"
- ,"//str[@name='id'][.='104']"
- ,"//str[@name='id'][.='105']"
- ,"//str[@name='id'][.='106']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='6']");
+ assertQ(req("*:*"), "//*[@numFound='6']");
+ assertQ(req("text:red"), "//*[@numFound='2']");
+ assertQ(req("-text:red"), "//*[@numFound='4']");
+ assertQ(req("text:grape"), "//*[@numFound='2']");
+ assertQ(req("-text:grape"), "//*[@numFound='4']");
+ assertQ(req("-text:red -text:grape"), "//*[@numFound='2']");
+ assertQ(
+ req("{!lucene q.op=AND df=text}grape green"),
+ "//*[@numFound='1']",
+ "//str[@name='id'][.='103']");
+ assertQ(
+ req("-_val_:\"{!lucene q.op=AND df=text}grape green\""),
+ "//*[@numFound='5']",
+ "//str[@name='id'][.='101']",
+ "//str[@name='id'][.='102']",
+ "//str[@name='id'][.='104']",
+ "//str[@name='id'][.='105']",
+ "//str[@name='id'][.='106']");
// tests
assertU(delQ("-*:*")); // NOOP
assertU(commit());
- assertQ(req("*:*")
- ,"//*[@numFound='6']"
- );
+ assertQ(req("*:*"), "//*[@numFound='6']");
assertU(delQ("-text:grape -text:red"));
assertU(commit());
- assertQ(req("*:*")
- ,"//*[@numFound='4']"
- ,"//str[@name='id'][.='101']"
- ,"//str[@name='id'][.='102']"
- ,"//str[@name='id'][.='103']"
- ,"//str[@name='id'][.='106']"
- );
+ assertQ(
+ req("*:*"),
+ "//*[@numFound='4']",
+ "//str[@name='id'][.='101']",
+ "//str[@name='id'][.='102']",
+ "//str[@name='id'][.='103']",
+ "//str[@name='id'][.='106']");
assertU(delQ("{!term f=id}106"));
assertU(commit());
- assertQ(req("*:*")
- ,"//*[@numFound='3']"
- ,"//str[@name='id'][.='101']"
- ,"//str[@name='id'][.='102']"
- ,"//str[@name='id'][.='103']"
- );
+ assertQ(
+ req("*:*"),
+ "//*[@numFound='3']",
+ "//str[@name='id'][.='101']",
+ "//str[@name='id'][.='102']",
+ "//str[@name='id'][.='103']");
assertU(delQ("-_val_:\"{!lucene q.op=AND df=text}grape green\""));
assertU(commit());
- assertQ(req("*:*")
- ,"//*[@numFound='1']"
- ,"//str[@name='id'][.='103']"
- );
+ assertQ(req("*:*"), "//*[@numFound='1']", "//str[@name='id'][.='103']");
assertU(delQ("-text:doesnotexist"));
assertU(commit());
- assertQ(req("*:*")
- ,"//*[@numFound='0']"
- );
-
+ assertQ(req("*:*"), "//*[@numFound='0']");
}
@Test
public void testHTMLStrip() {
- assertU(add(doc("id","200", "HTMLwhitetok","ABC")));
- assertU(add(doc("id","201", "HTMLwhitetok","ABC"))); // do it again to make sure reuse is working
+ assertU(add(doc("id", "200", "HTMLwhitetok", "ABC")));
+ // do it again to make sure reuse is working
+ assertU(add(doc("id", "201", "HTMLwhitetok", "ABC")));
assertU(commit());
- assertQ(req("q","HTMLwhitetok:ABC")
- ,"//*[@numFound='2']"
- );
- assertQ(req("q","HTMLwhitetok:ABC")
- ,"//*[@numFound='2']"
- );
+ assertQ(req("q", "HTMLwhitetok:ABC"), "//*[@numFound='2']");
+ assertQ(req("q", "HTMLwhitetok:ABC"), "//*[@numFound='2']");
}
@Test
@@ -351,48 +296,52 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
ignoreException(BAD_VALUE);
final List<String> FIELDS = new LinkedList<>();
- for (String type : new String[] {
- "tdt", "tdt1", "tdtdv", "tdtdv1",
- "dt_dv", "dt_dvo", "dt", "dt1", "dt_os"
- }) {
+ for (String type :
+ new String[] {"tdt", "tdt1", "tdtdv", "tdtdv1", "dt_dv", "dt_dvo", "dt", "dt1", "dt_os"}) {
FIELDS.add("malformed_" + type);
}
// test that malformed numerics cause client error not server error
for (String field : FIELDS) {
- SolrException e1 = expectThrows(SolrException.class,
- "Didn't encounter an error trying to add a bad date: " + field,
- () -> h.update(add( doc("id","100", field, BAD_VALUE))));
+ SolrException e1 =
+ expectThrows(
+ SolrException.class,
+ "Didn't encounter an error trying to add a bad date: " + field,
+ () -> h.update(add(doc("id", "100", field, BAD_VALUE))));
String msg1 = e1.getMessage();
- assertTrue("not an (update) client error on field: " + field +" : "+ msg1,
+ assertTrue(
+ "not an (update) client error on field: " + field + " : " + msg1,
400 <= e1.code() && e1.code() < 500);
- assertTrue("(update) client error does not mention bad value: " + msg1,
- msg1.contains(BAD_VALUE));
- assertTrue("client error does not mention document id: " + msg1,
- msg1.contains("[doc=100]"));
+ assertTrue(
+ "(update) client error does not mention bad value: " + msg1, msg1.contains(BAD_VALUE));
+ assertTrue("client error does not mention document id: " + msg1, msg1.contains("[doc=100]"));
SchemaField sf = h.getCore().getLatestSchema().getField(field);
if (!sf.hasDocValues() && !sf.indexed()) {
continue;
}
- SolrException e2 = expectThrows(SolrException.class,
- "Didn't encounter an error trying to add a bad date: " + field,
- () -> h.query(req("q",field + ":" + BAD_VALUE))
- );
+ SolrException e2 =
+ expectThrows(
+ SolrException.class,
+ "Didn't encounter an error trying to add a bad date: " + field,
+ () -> h.query(req("q", field + ":" + BAD_VALUE)));
String msg2 = e2.toString();
- assertTrue("not a (search) client error on field: " + field +" : "+ msg2,
+ assertTrue(
+ "not a (search) client error on field: " + field + " : " + msg2,
400 <= e2.code() && e2.code() < 500);
- assertTrue("(search) client error does not mention bad value: " + msg2,
- msg2.contains(BAD_VALUE));
-
- SolrException e3 = expectThrows(SolrException.class,
- "Didn't encounter an error trying to add a bad date: " + field,
- () -> h.query(req("q",field + ":[NOW TO " + BAD_VALUE + "]"))
- );
+ assertTrue(
+ "(search) client error does not mention bad value: " + msg2, msg2.contains(BAD_VALUE));
+
+ SolrException e3 =
+ expectThrows(
+ SolrException.class,
+ "Didn't encounter an error trying to add a bad date: " + field,
+ () -> h.query(req("q", field + ":[NOW TO " + BAD_VALUE + "]")));
String msg3 = e3.toString();
- assertTrue("not a (search) client error on field: " + field +" : "+ msg3,
+ assertTrue(
+ "not a (search) client error on field: " + field + " : " + msg3,
400 <= e3.code() && e3.code() < 500);
- assertTrue("(search) client error does not mention bad value: " + msg3,
- msg3.contains(BAD_VALUE));
+ assertTrue(
+ "(search) client error does not mention bad value: " + msg3, msg3.contains(BAD_VALUE));
}
}
@@ -403,131 +352,140 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
ignoreException(BAD_VALUE);
final List<String> FIELDS = new LinkedList<>();
- for (String type : new String[] {
- "ti", "tf", "td", "tl",
- "i", "f", "d", "l",
- "i_dv", "f_dv", "d_dv", "l_dv",
- "i_dvo", "f_dvo", "d_dvo", "l_dvo",
- "i_os", "f_os", "d_os", "l_os"
+ for (String type :
+ new String[] {
+ "ti", "tf", "td", "tl",
+ "i", "f", "d", "l",
+ "i_dv", "f_dv", "d_dv", "l_dv",
+ "i_dvo", "f_dvo", "d_dvo", "l_dvo",
+ "i_os", "f_os", "d_os", "l_os"
}) {
FIELDS.add("malformed_" + type);
}
// test that malformed numerics cause client error not server error
for (String field : FIELDS) {
- SolrException e1 = expectThrows(SolrException.class,
- "Didn't encounter an error trying to add a non-number: " + field,
- () -> h.update(add( doc("id","100", field, BAD_VALUE))));
+ SolrException e1 =
+ expectThrows(
+ SolrException.class,
+ "Didn't encounter an error trying to add a non-number: " + field,
+ () -> h.update(add(doc("id", "100", field, BAD_VALUE))));
String msg1 = e1.toString();
- assertTrue("not an (update) client error on field: " + field +" : "+ msg1,
+ assertTrue(
+ "not an (update) client error on field: " + field + " : " + msg1,
400 <= e1.code() && e1.code() < 500);
- assertTrue("(update) client error does not mention bad value: " + msg1,
- msg1.contains(BAD_VALUE));
- assertTrue("client error does not mention document id",
- msg1.contains("[doc=100]"));
- SchemaField sf = h.getCore().getLatestSchema().getField(field);
+ assertTrue(
+ "(update) client error does not mention bad value: " + msg1, msg1.contains(BAD_VALUE));
+ assertTrue("client error does not mention document id", msg1.contains("[doc=100]"));
+ SchemaField sf = h.getCore().getLatestSchema().getField(field);
if (!sf.hasDocValues() && !sf.indexed()) {
continue;
}
- SolrException e2 = expectThrows(SolrException.class,
- "Didn't encounter an error trying to add a non-number: " + field,
- () -> h.query(req("q",field + ":" + BAD_VALUE))
- );
+ SolrException e2 =
+ expectThrows(
+ SolrException.class,
+ "Didn't encounter an error trying to add a non-number: " + field,
+ () -> h.query(req("q", field + ":" + BAD_VALUE)));
String msg2 = e2.toString();
- assertTrue("not a (search) client error on field: " + field +" : "+ msg2,
+ assertTrue(
+ "not a (search) client error on field: " + field + " : " + msg2,
400 <= e2.code() && e2.code() < 500);
- assertTrue("(search) client error does not mention bad value: " + msg2,
- msg2.contains(BAD_VALUE));
-
- SolrException e3 = expectThrows(SolrException.class,
- "Didn't encounter an error trying to add a non-number: " + field,
- () -> h.query(req("q",field + ":[10 TO " + BAD_VALUE + "]"))
- );
+ assertTrue(
+ "(search) client error does not mention bad value: " + msg2, msg2.contains(BAD_VALUE));
+
+ SolrException e3 =
+ expectThrows(
+ SolrException.class,
+ "Didn't encounter an error trying to add a non-number: " + field,
+ () -> h.query(req("q", field + ":[10 TO " + BAD_VALUE + "]")));
String msg3 = e3.toString();
- assertTrue("not a (search) client error on field: " + field +" : "+ msg3,
+ assertTrue(
+ "not a (search) client error on field: " + field + " : " + msg3,
400 <= e3.code() && e3.code() < 500);
- assertTrue("(search) client error does not mention bad value: " + msg3,
- msg3.contains(BAD_VALUE));
+ assertTrue(
+ "(search) client error does not mention bad value: " + msg3, msg3.contains(BAD_VALUE));
}
}
-
+
@Test
public void testRequestHandlerBaseException() {
final String tmp = "BOO! ignore_exception";
- SolrRequestHandler handler = new RequestHandlerBase() {
- @Override
- public Name getPermissionName(AuthorizationContext request) {
- return Name.ALL;
- }
-
- @Override
- public String getDescription() { return tmp; }
- @Override
- public void handleRequestBody
- ( SolrQueryRequest req, SolrQueryResponse rsp ) {
- throw new RuntimeException(tmp);
- }
- };
+ SolrRequestHandler handler =
+ new RequestHandlerBase() {
+ @Override
+ public Name getPermissionName(AuthorizationContext request) {
+ return Name.ALL;
+ }
+
+ @Override
+ public String getDescription() {
+ return tmp;
+ }
+
+ @Override
+ public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) {
+ throw new RuntimeException(tmp);
+ }
+ };
handler.init(new NamedList<>());
SolrQueryResponse rsp = new SolrQueryResponse();
SolrQueryRequest req = req();
- h.getCore().execute(handler,
- req,
- rsp);
+ h.getCore().execute(handler, req, rsp);
assertNotNull("should have found an exception", rsp.getException());
- req.close();
+ req.close();
}
@Test
public void testMultipleUpdatesPerAdd() {
clearIndex();
// big freaking kludge since the response is currently not well formed.
- String res = h.update("<add><doc><field name=\"id\">1</field></doc><doc><field name=\"id\">2</field></doc></add>");
+ String res =
+ h.update(
+ "<add><doc><field name=\"id\">1</field></doc><doc><field name=\"id\">2</field></doc></add>");
// assertEquals("<result status=\"0\"></result>", res);
assertU("<commit/>");
- assertQ(req("id:[0 TO 99]")
- ,"//*[@numFound='2']"
- );
-
+ assertQ(req("id:[0 TO 99]"), "//*[@numFound='2']");
}
@Test
public void testDocBoost() throws Exception {
- String res = h.update("<add>" + "<doc><field name=\"id\">1</field>"+
- "<field name=\"text\">hello</field></doc>" +
- "<doc boost=\"2.0\"><field name=\"id\">2</field>" +
- "<field name=\"text\">hello</field></doc>" +
- "</add>");
+ String res =
+ h.update(
+ "<add>"
+ + "<doc><field name=\"id\">1</field>"
+ + "<field name=\"text\">hello</field></doc>"
+ + "<doc boost=\"2.0\"><field name=\"id\">2</field>"
+ + "<field name=\"text\">hello</field></doc>"
+ + "</add>");
// assertEquals("<result status=\"0\"></result>", res);
assertU("<commit/>");
- assertQ(req("text:hello")
- ,"//*[@numFound='2']"
- );
+ assertQ(req("text:hello"), "//*[@numFound='2']");
String resp = h.query(lrf.makeRequest("q", "text:hello", CommonParams.DEBUG_QUERY, "true"));
- //System.out.println(resp);
+ // System.out.println(resp);
// second doc ranked first
- assertTrue( resp.indexOf("\"2\"") < resp.indexOf("\"1\"") );
+ assertTrue(resp.indexOf("\"2\"") < resp.indexOf("\"1\""));
}
@Test
public void testFieldBoost() throws Exception {
- String res = h.update("<add>" + "<doc><field name=\"id\">1</field>"+
- "<field name=\"text\">hello</field></doc>" +
- "<doc><field name=\"id\">2</field>" +
- "<field boost=\"2.0\" name=\"text\">hello</field></doc>" +
- "</add>");
+ String res =
+ h.update(
+ "<add>"
+ + "<doc><field name=\"id\">1</field>"
+ + "<field name=\"text\">hello</field></doc>"
+ + "<doc><field name=\"id\">2</field>"
+ + "<field boost=\"2.0\" name=\"text\">hello</field></doc>"
+ + "</add>");
// assertEquals("<result status=\"0\"></result>", res);
assertU("<commit/>");
- assertQ(req("text:hello"),
- "//*[@numFound='2']"
- );
+ assertQ(req("text:hello"), "//*[@numFound='2']");
String resp = h.query(lrf.makeRequest("q", "text:hello", CommonParams.DEBUG_QUERY, "true"));
- //System.out.println(resp);
+ // System.out.println(resp);
// second doc ranked first
- assertTrue( resp.indexOf("\"2\"") < resp.indexOf("\"1\"") );
+ assertTrue(resp.indexOf("\"2\"") < resp.indexOf("\"1\""));
}
@Test
@@ -538,11 +496,10 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
StringWriter writer = new StringWriter(32000);
SolrQueryRequest req = req("foo");
- XMLWriter.writeResponse(writer,req,rsp);
+ XMLWriter.writeResponse(writer, req, rsp);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- builder.parse(new ByteArrayInputStream
- (writer.toString().getBytes(StandardCharsets.UTF_8)));
+ builder.parse(new ByteArrayInputStream(writer.toString().getBytes(StandardCharsets.UTF_8)));
req.close();
}
@@ -569,22 +526,21 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
@Test
public void testKeywordTokenizerFactory() {
- assertU(adoc("id", "42",
- "keywordtok", "How nOw broWn-ish C.o.w. ?"));
+ assertU(
+ adoc(
+ "id", "42",
+ "keywordtok", "How nOw broWn-ish C.o.w. ?"));
assertU(commit());
- assertQ("stored value matches?",
- req("id:42")
- ,"//str[.='How nOw broWn-ish C.o.w. ?']"
- );
- assertQ("query on exact matches?",
- req("keywordtok:\"How nOw broWn-ish C.o.w. ?\"")
- ,"//str[.='How nOw broWn-ish C.o.w. ?']"
- );
+ assertQ("stored value matches?", req("id:42"), "//str[.='How nOw broWn-ish C.o.w. ?']");
+ assertQ(
+ "query on exact matches?",
+ req("keywordtok:\"How nOw broWn-ish C.o.w. ?\""),
+ "//str[.='How nOw broWn-ish C.o.w. ?']");
}
@Test
public void testTermVectorFields() {
-
+
IndexSchema ischema = IndexSchemaFactory.buildIndexSchema(getSchemaFile(), solrConfig);
SchemaField f; // Solr field type
IndexableField luf; // Lucene field
@@ -612,59 +568,66 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
f = ischema.getField("test_posofftv");
luf = f.createField("test");
assertTrue(f.storeTermVector() && f.storeTermPositions() && f.storeTermOffsets());
- assertTrue(luf.fieldType().storeTermVectorOffsets() && luf.fieldType().storeTermVectorPositions());
+ assertTrue(
+ luf.fieldType().storeTermVectorOffsets() && luf.fieldType().storeTermVectorPositions());
f = ischema.getField("test_posoffpaytv");
luf = f.createField("test");
- assertTrue(f.storeTermVector() && f.storeTermPositions() && f.storeTermOffsets() && f.storeTermPayloads());
- assertTrue(luf.fieldType().storeTermVectorOffsets() && luf.fieldType().storeTermVectorPositions() && luf.fieldType().storeTermVectorPayloads());
-
+ assertTrue(
+ f.storeTermVector()
+ && f.storeTermPositions()
+ && f.storeTermOffsets()
+ && f.storeTermPayloads());
+ assertTrue(
+ luf.fieldType().storeTermVectorOffsets()
+ && luf.fieldType().storeTermVectorPositions()
+ && luf.fieldType().storeTermVectorPayloads());
}
@Test
public void testSolrParams() throws Exception {
NamedList<Object> nl = new NamedList<>();
- nl.add("i",555);
- nl.add("s","bbb");
- nl.add("bt","true");
- nl.add("bf","false");
+ nl.add("i", 555);
+ nl.add("s", "bbb");
+ nl.add("bt", "true");
+ nl.add("bf", "false");
- Map<String,String> m = new HashMap<>();
+ Map<String, String> m = new HashMap<>();
m.put("f.field1.i", "1000");
m.put("s", "BBB");
m.put("ss", "SSS");
- LocalSolrQueryRequest req = new LocalSolrQueryRequest(null,nl);
+ LocalSolrQueryRequest req = new LocalSolrQueryRequest(null, nl);
SolrParams p = req.getParams();
assertEquals(p.get("i"), "555");
assertEquals(p.getInt("i").intValue(), 555);
- assertEquals(p.getInt("i",5), 555);
- assertEquals(p.getInt("iii",5), 5);
- assertEquals(p.getFieldParam("field1","i"), "555");
+ assertEquals(p.getInt("i", 5), 555);
+ assertEquals(p.getInt("iii", 5), 5);
+ assertEquals(p.getFieldParam("field1", "i"), "555");
req.setParams(SolrParams.wrapDefaults(p, new MapSolrParams(m)));
p = req.getParams();
assertEquals(req.getOriginalParams().get("s"), "bbb");
assertEquals(p.get("i"), "555");
assertEquals(p.getInt("i").intValue(), 555);
- assertEquals(p.getInt("i",5), 555);
- assertEquals(p.getInt("iii",5), 5);
+ assertEquals(p.getInt("i", 5), 555);
+ assertEquals(p.getInt("iii", 5), 5);
- assertEquals(p.getFieldParam("field1","i"), "1000");
+ assertEquals(p.getFieldParam("field1", "i"), "1000");
assertEquals(p.get("s"), "bbb");
assertEquals(p.get("ss"), "SSS");
assertEquals(!!p.getBool("bt"), !p.getBool("bf"));
- assertEquals(p.getBool("foo",true), true);
- assertEquals(p.getBool("foo",false), false);
+ assertEquals(p.getBool("foo", true), true);
+ assertEquals(p.getBool("foo", false), false);
assertEquals(!!p.getBool("bt"), !p.getBool("bf"));
NamedList<String> more = new NamedList<>();
more.add("s", "aaa");
more.add("s", "ccc");
- more.add("ss","YYY");
- more.add("xx","XXX");
+ more.add("ss", "YYY");
+ more.add("xx", "XXX");
p = SolrParams.wrapAppended(p, more.toSolrParams());
assertEquals(3, p.getParams("s").length);
assertEquals("bbb", p.getParams("s")[0]);
@@ -680,115 +643,120 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
@Test
public void testDefaultFieldValues() {
clearIndex();
- lrf.args.put(CommonParams.VERSION,"2.2");
- assertU(adoc("id", "4055",
- "subject", "Hoss the Hoss man Hostetter"));
- assertU(adoc("id", "4056",
- "intDefault", "4",
- "subject", "Some Other Guy"));
- assertU(adoc("id", "4057",
- "multiDefault", "a",
- "multiDefault", "b",
- "subject", "The Dude"));
+ lrf.args.put(CommonParams.VERSION, "2.2");
+ assertU(
+ adoc(
+ "id", "4055",
+ "subject", "Hoss the Hoss man Hostetter"));
+ assertU(
+ adoc(
+ "id", "4056",
+ "intDefault", "4",
+ "subject", "Some Other Guy"));
+ assertU(
+ adoc(
+ "id", "4057",
+ "multiDefault", "a",
+ "multiDefault", "b",
+ "subject", "The Dude"));
assertU(commit());
- assertQ("everthing should have recent timestamp",
- req("timestamp:[NOW-10MINUTES TO NOW]")
- ,"*[count(//doc)=3]"
- ,"//date[@name='timestamp']"
- );
-
- assertQ("2 docs should have the default for multiDefault",
- req("multiDefault:muLti-Default")
- ,"*[count(//doc)=2]"
- ,"//arr[@name='multiDefault']"
- );
- assertQ("1 doc should have its explicit multiDefault",
- req("multiDefault:a")
- ,"*[count(//doc)=1]"
- );
-
- assertQ("2 docs should have the default for intDefault",
- req("intDefault:42")
- ,"*[count(//doc)=2]"
- );
- assertQ("1 doc should have its explicit intDefault",
- req("intDefault:[3 TO 5]")
- ,"*[count(//doc)=1]"
- );
-
+ assertQ(
+ "everthing should have recent timestamp",
+ req("timestamp:[NOW-10MINUTES TO NOW]"),
+ "*[count(//doc)=3]",
+ "//date[@name='timestamp']");
+
+ assertQ(
+ "2 docs should have the default for multiDefault",
+ req("multiDefault:muLti-Default"),
+ "*[count(//doc)=2]",
+ "//arr[@name='multiDefault']");
+ assertQ(
+ "1 doc should have its explicit multiDefault", req("multiDefault:a"), "*[count(//doc)=1]");
+
+ assertQ(
+ "2 docs should have the default for intDefault", req("intDefault:42"), "*[count(//doc)=2]");
+ assertQ(
+ "1 doc should have its explicit intDefault",
+ req("intDefault:[3 TO 5]"),
+ "*[count(//doc)=1]");
}
@Test
public void testTokenizer() {
- assertU(adoc("id", "4055",
- "patterntok", "Hello,There"));
- assertU(adoc("id", "4056",
- "patterntok", "Goodbye,Now"));
+ assertU(adoc("id", "4055", "patterntok", "Hello,There"));
+ assertU(adoc("id", "4056", "patterntok", "Goodbye,Now"));
assertU(commit());
- assertQ("make sure it split ok",
- req("patterntok:Hello")
- ,"*[count(//doc)=1]"
- );
- assertQ("make sure it split ok",
- req("patterntok:Goodbye")
- ,"*[count(//doc)=1]"
- );
+ assertQ("make sure it split ok", req("patterntok:Hello"), "*[count(//doc)=1]");
+ assertQ("make sure it split ok", req("patterntok:Goodbye"), "*[count(//doc)=1]");
}
@Test
public void testConfigDefaults() {
- assertU(adoc("id", "42",
- "name", "Zapp Brannigan"));
- assertU(adoc("id", "43",
- "title", "Democratic Order of Planets"));
- assertU(adoc("id", "44",
- "name", "The Zapper"));
- assertU(adoc("id", "45",
- "title", "25 star General"));
- assertU(adoc("id", "46",
- "subject", "Defeated the pacifists of the Gandhi nebula"));
- assertU(adoc("id", "47",
- "text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
+ assertU(
+ adoc(
+ "id", "42",
+ "name", "Zapp Brannigan"));
+ assertU(
+ adoc(
+ "id", "43",
+ "title", "Democratic Order of Planets"));
+ assertU(
+ adoc(
+ "id", "44",
+ "name", "The Zapper"));
+ assertU(
+ adoc(
+ "id", "45",
+ "title", "25 star General"));
+ assertU(
+ adoc(
+ "id", "46",
+ "subject", "Defeated the pacifists of the Gandhi nebula"));
+ assertU(
+ adoc(
+ "id", "47",
+ "text",
+ "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
assertU(commit());
- assertQ("standard request handler returns all matches",
- req("id:[42 TO 47]"),
- "*[count(//doc)=6]"
- );
-
- assertQ("defaults handler returns fewer matches",
- req("q", "id:[42 TO 47]", "qt","/defaults"),
- "*[count(//doc)=4]"
- );
+ assertQ(
+ "standard request handler returns all matches", req("id:[42 TO 47]"), "*[count(//doc)=6]");
- assertQ("defaults handler includes highlighting",
- req("q", "name:Zapp OR title:General", "qt","/defaults"),
- "//lst[@name='highlighting']"
- );
+ assertQ(
+ "defaults handler returns fewer matches",
+ req("q", "id:[42 TO 47]", "qt", "/defaults"),
+ "*[count(//doc)=4]");
+ assertQ(
+ "defaults handler includes highlighting",
+ req("q", "name:Zapp OR title:General", "qt", "/defaults"),
+ "//lst[@name='highlighting']");
}
private String mkstr(int len) {
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
- sb.append((char)(65 + i%26));
+ sb.append((char) (65 + i % 26));
}
return new String(sb);
- }
+ }
@Test
public void testNotLazyField() throws IOException {
- assertU(adoc("id", "7777",
- "title", "keyword",
- "test_hlt", mkstr(20000)));
+ assertU(
+ adoc(
+ "id", "7777",
+ "title", "keyword",
+ "test_hlt", mkstr(20000)));
assertU(commit());
SolrCore core = h.getCore();
-
+
SolrQueryRequest req = req("q", "id:7777", "fl", "id,title,test_hlt");
SolrQueryResponse rsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
@@ -796,42 +764,44 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
DocList dl = ((ResultContext) rsp.getResponse()).getDocList();
Document d = req.getSearcher().doc(dl.iterator().nextDoc());
// ensure field in fl is not lazy
- assertFalse( ((Field) d.getField("test_hlt")).getClass().getSimpleName().equals("LazyField"));
- assertFalse( ((Field) d.getField("title")).getClass().getSimpleName().equals("LazyField"));
+ assertFalse(((Field) d.getField("test_hlt")).getClass().getSimpleName().equals("LazyField"));
+ assertFalse(((Field) d.getField("title")).getClass().getSimpleName().equals("LazyField"));
req.close();
}
@Test
public void testLazyField() throws IOException {
- assertU(adoc("id", "7777",
- "title", "keyword",
- "test_hlt", mkstr(10000),
- "test_hlt", mkstr(20000),
- "test_hlt", mkstr(30000),
- "test_hlt", mkstr(40000)));
+ assertU(
+ adoc(
+ "id", "7777",
+ "title", "keyword",
+ "test_hlt", mkstr(10000),
+ "test_hlt", mkstr(20000),
+ "test_hlt", mkstr(30000),
+ "test_hlt", mkstr(40000)));
assertU(commit());
SolrCore core = h.getCore();
-
+
// initial request
SolrQueryRequest req = req("q", "id:7777", "fl", "id,title");
SolrQueryResponse rsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
DocList dl = ((ResultContext) rsp.getResponse()).getDocList();
- DocIterator di = dl.iterator();
+ DocIterator di = dl.iterator();
Document d1 = req.getSearcher().doc(di.nextDoc());
IndexableField[] values1 = null;
// ensure fl field is non lazy, and non-fl field is lazy
- assertFalse( d1.getField("title") instanceof LazyDocument.LazyField);
- assertFalse( d1.getField("id") instanceof LazyDocument.LazyField);
+ assertFalse(d1.getField("title") instanceof LazyDocument.LazyField);
+ assertFalse(d1.getField("id") instanceof LazyDocument.LazyField);
values1 = d1.getFields("test_hlt");
assertEquals(4, values1.length);
for (int i = 0; i < values1.length; i++) {
- assertTrue( values1[i] instanceof LazyDocument.LazyField );
+ assertTrue(values1[i] instanceof LazyDocument.LazyField);
LazyDocument.LazyField f = (LazyDocument.LazyField) values1[i];
- assertFalse( f.hasBeenLoaded() );
+ assertFalse(f.hasBeenLoaded());
}
req.close();
@@ -841,18 +811,17 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
core.execute(core.getRequestHandler(req.getParams().get(CommonParams.QT)), req, rsp);
dl = ((ResultContext) rsp.getResponse()).getDocList();
- di = dl.iterator();
+ di = dl.iterator();
Document d2 = req.getSearcher().doc(di.nextDoc());
// ensure same doc, same lazy field now
assertTrue("Doc was not cached", d1 == d2);
IndexableField[] values2 = d2.getFields("test_hlt");
assertEquals(values1.length, values2.length);
for (int i = 0; i < values1.length; i++) {
- assertSame("LazyField wasn't reused",
- values1[i], values2[i]);
+ assertSame("LazyField wasn't reused", values1[i], values2[i]);
LazyDocument.LazyField f = (LazyDocument.LazyField) values1[i];
// still not a real boy, no response writer in play
- assertFalse(f.hasBeenLoaded());
+ assertFalse(f.hasBeenLoaded());
}
assertNotNull(values2[0].stringValue()); // actuallize one value
@@ -863,8 +832,7 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
}
req.close();
- }
-
+ }
/** @see org.apache.solr.util.DateMathParserTest */
@Test
@@ -879,14 +847,14 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
// assuming the test doesn't take too long to run...
final String july4 = "1976-07-04T12:08:56.235Z";
- assertU(adoc("id", "1", "bday", july4));
- assertU(adoc("id", "2", "bday", "NOW"));
- assertU(adoc("id", "3", "bday", "NOW/HOUR"));
- assertU(adoc("id", "4", "bday", "NOW-30MINUTES"));
- assertU(adoc("id", "5", "bday", "NOW+30MINUTES"));
- assertU(adoc("id", "6", "bday", "NOW+2YEARS"));
+ assertU(adoc("id", "1", "bday", july4));
+ assertU(adoc("id", "2", "bday", "NOW"));
+ assertU(adoc("id", "3", "bday", "NOW/HOUR"));
+ assertU(adoc("id", "4", "bday", "NOW-30MINUTES"));
+ assertU(adoc("id", "5", "bday", "NOW+30MINUTES"));
+ assertU(adoc("id", "6", "bday", "NOW+2YEARS"));
assertU(commit());
-
+
// a ridiculoulsy long date math expression that's still equivalent to july4
final StringBuilder july4Long = new StringBuilder(july4);
final int iters = atLeast(10);
@@ -896,153 +864,166 @@ public class BasicFunctionalityTest extends SolrTestCaseJ4 {
}
// term queries using date math (all of these should match doc#1)
- for (String q :
- new String[] {
- "bday:1976-07-04T12\\:08\\:56.45Z/SECOND+235MILLIS",
- "bday:1976-07-04T12\\:08\\:56.123Z/MINUTE+56SECONDS+235MILLIS",
- "bday:\"1976-07-04T12:08:56.45Z/SECOND+235MILLIS\"",
- "bday:\"1976-07-04T12:08:56.123Z/MINUTE+56SECONDS+235MILLIS\"",
- "{!term f=bday}1976-07-04T12:08:56.45Z/SECOND+235MILLIS",
- "{!term f=bday}1976-07-04T12:08:56.123Z/MINUTE+56SECONDS+235MILLIS",
- "{!term f=bday}"+july4,
- "{!term f=bday}"+july4Long,
- "bday:\"" + july4Long + "\""
- }) {
- assertQ("check math on field query: " + q,
- req("q", q),
- "*[count(//doc)=1]",
- "//str[@name='id'][.='1']");
+ for (String q :
+ new String[] {
+ "bday:1976-07-04T12\\:08\\:56.45Z/SECOND+235MILLIS",
+ "bday:1976-07-04T12\\:08\\:56.123Z/MINUTE+56SECONDS+235MILLIS",
+ "bday:\"1976-07-04T12:08:56.45Z/SECOND+235MILLIS\"",
+ "bday:\"1976-07-04T12:08:56.123Z/MINUTE+56SECONDS+235MILLIS\"",
+ "{!term f=bday}1976-07-04T12:08:56.45Z/SECOND+235MILLIS",
+ "{!term f=bday}1976-07-04T12:08:56.123Z/MINUTE+56SECONDS+235MILLIS",
+ "{!term f=bday}" + july4,
+ "{!term f=bday}" + july4Long,
+ "bday:\"" + july4Long + "\""
+ }) {
+ assertQ(
+ "check math on field query: " + q,
+ req("q", q),
+ "*[count(//doc)=1]",
+ "//str[@name='id'][.='1']");
}
// range queries using date math
- assertQ("check math on absolute date#1",
- req("q", "bday:[* TO "+july4+"/SECOND]"),
- "*[count(//doc)=0]");
- assertQ("check math on absolute date#2",
- req("q", "bday:[* TO "+july4+"/SECOND+1SECOND]"),
- "*[count(//doc)=1]");
- assertQ("check math on absolute date#3",
- req("q", "bday:["+july4+"/SECOND TO "+july4+"/SECOND+1SECOND]"),
- "*[count(//doc)=1]");
- assertQ("check math on absolute date#4",
- req("q", "bday:["+july4+"/MINUTE+1MINUTE TO *]"),
- "*[count(//doc)=5]");
-
- assertQ("check count for before now",
- req("q", "bday:[* TO NOW]"), "*[count(//doc)=4]");
-
- assertQ("check count for after now",
- req("q", "bday:[NOW TO *]"), "*[count(//doc)=2]");
-
- assertQ("check count for old stuff",
- req("q", "bday:[* TO NOW-2YEARS]"), "*[count(//doc)=1]");
-
- assertQ("check count for future stuff",
- req("q", "bday:[NOW+1MONTH TO *]"), "*[count(//doc)=1]");
-
- assertQ("check count for near stuff",
- req("q", "bday:[NOW-1MONTH TO NOW+2HOURS]"), "*[count(//doc)=4]");
-
- assertQ("check counts using fixed NOW",
- req("q", "bday:[NOW/DAY TO NOW/DAY+1DAY]",
- "NOW", "205369736000" // 1976-07-04T23:08:56.235Z
- ),
- "*[count(//doc)=1]");
-
- assertQ("check counts using fixed NOW and TZ rounding",
- req("q", "bday:[NOW/DAY TO NOW/DAY+1DAY]",
- "TZ", "GMT+01",
- "NOW", "205369736000" // 1976-07-04T23:08:56.235Z
- ),
- "*[count(//doc)=0]");
-
+ assertQ(
+ "check math on absolute date#1",
+ req("q", "bday:[* TO " + july4 + "/SECOND]"),
+ "*[count(//doc)=0]");
+ assertQ(
+ "check math on absolute date#2",
+ req("q", "bday:[* TO " + july4 + "/SECOND+1SECOND]"),
+ "*[count(//doc)=1]");
+ assertQ(
+ "check math on absolute date#3",
+ req("q", "bday:[" + july4 + "/SECOND TO " + july4 + "/SECOND+1SECOND]"),
+ "*[count(//doc)=1]");
+ assertQ(
+ "check math on absolute date#4",
+ req("q", "bday:[" + july4 + "/MINUTE+1MINUTE TO *]"),
+ "*[count(//doc)=5]");
+
+ assertQ("check count for before now", req("q", "bday:[* TO NOW]"), "*[count(//doc)=4]");
+
+ assertQ("check count for after now", req("q", "bday:[NOW TO *]"), "*[count(//doc)=2]");
+
+ assertQ("check count for old stuff", req("q", "bday:[* TO NOW-2YEARS]"), "*[count(//doc)=1]");
+
+ assertQ(
+ "check count for future stuff", req("q", "bday:[NOW+1MONTH TO *]"), "*[count(//doc)=1]");
+
+ assertQ(
+ "check count for near stuff",
+ req("q", "bday:[NOW-1MONTH TO NOW+2HOURS]"),
+ "*[count(//doc)=4]");
+
+ assertQ(
+ "check counts using fixed NOW",
+ req(
+ "q", "bday:[NOW/DAY TO NOW/DAY+1DAY]",
+ "NOW", "205369736000" // 1976-07-04T23:08:56.235Z
+ ),
+ "*[count(//doc)=1]");
+
+ assertQ(
+ "check counts using fixed NOW and TZ rounding",
+ req(
+ "q", "bday:[NOW/DAY TO NOW/DAY+1DAY]",
+ "TZ", "GMT+01",
+ "NOW", "205369736000" // 1976-07-04T23:08:56.235Z
+ ),
+ "*[count(//doc)=0]");
}
// commented after SOLR-8904; both are false
-// public void testDateRoundtrip() {
-// assertU(adoc("id", "99", "bday", "99-01-01T12:34:56.789Z"));
-// assertU(commit());
-// assertQ("year should be canonicallized to 4 digits",
-// req("q", "id:99"),
-// "//date[@name='bday'][.='0099-01-01T12:34:56.789Z']");
-// assertU(adoc("id", "99", "bday", "1999-01-01T12:34:56.900Z"));
-// assertU(commit());
-// assertQ("millis should be canonicallized to no trailing zeros",
-// req("q", "id:99"),
-// "//date[@name='bday'][.='1999-01-01T12:34:56.9Z']");
-// }
-
+ // public void testDateRoundtrip() {
+ // assertU(adoc("id", "99", "bday", "99-01-01T12:34:56.789Z"));
+ // assertU(commit());
+ // assertQ("year should be canonicallized to 4 digits",
+ // req("q", "id:99"),
+ // "//date[@name='bday'][.='0099-01-01T12:34:56.789Z']");
+ // assertU(adoc("id", "99", "bday", "1999-01-01T12:34:56.900Z"));
+ // assertU(commit());
+ // assertQ("millis should be canonicallized to no trailing zeros",
+ // req("q", "id:99"),
+ // "//date[@name='bday'][.='1999-01-01T12:34:56.9Z']");
+ // }
+
@Test
public void testPatternReplaceFilter() {
- assertU(adoc("id", "1",
- "patternreplacefilt", "My fine-feathered friend!"));
- assertU(adoc("id", "2",
- "patternreplacefilt", " What's Up Doc?"));
+ assertU(
+ adoc(
+ "id", "1",
+ "patternreplacefilt", "My fine-feathered friend!"));
+ assertU(
+ adoc(
+ "id", "2",
+ "patternreplacefilt", " What's Up Doc?"));
assertU(commit());
-
- assertQ("don't find Up",
- req("q", "patternreplacefilt:Up"),
- "*[count(//doc)=0]");
-
- assertQ("find doc",
- req("q", "patternreplacefilt:__What_s_Up_Doc_"),
- "*[count(//doc)=1]");
-
- assertQ("find birds",
- req("q", "patternreplacefilt:My__fine_feathered_friend_"),
- "*[count(//doc)=1]");
+
+ assertQ("don't find Up", req("q", "patternreplacefilt:Up"), "*[count(//doc)=0]");
+
+ assertQ("find doc", req("q", "patternreplacefilt:__What_s_Up_Doc_"), "*[count(//doc)=1]");
+
+ assertQ(
+ "find birds",
+ req("q", "patternreplacefilt:My__fine_feathered_friend_"),
+ "*[count(//doc)=1]");
}
@Test
public void testAbuseOfSort() {
- assertU(adoc("id", "9999991",
- "sortabuse_not_uninvertible", "xxx",
- "sortabuse_t", "zzz xxx ccc vvv bbb nnn aaa sss ddd fff ggg"));
- assertU(adoc("id", "9999992",
- "sortabuse_not_uninvertible", "yyy",
- "sortabuse_t", "zzz xxx ccc vvv bbb nnn qqq www eee rrr ttt"));
+ assertU(
+ adoc(
+ "id", "9999991",
+ "sortabuse_not_uninvertible", "xxx",
+ "sortabuse_t", "zzz xxx ccc vvv bbb nnn aaa sss ddd fff ggg"));
+ assertU(
+ adoc(
+ "id", "9999992",
+ "sortabuse_not_uninvertible", "yyy",
+ "sortabuse_t", "zzz xxx ccc vvv bbb nnn qqq www eee rrr ttt"));
assertU(commit());
for (String f : Arrays.asList("sortabuse_not_uninvertible", "sortabuse_t")) {
- RuntimeException outerEx = expectThrows(RuntimeException.class, () -> {
- ignoreException("sortabuse");
- assertQ("sort on something that shouldn't work",
- req("q", "*:*",
- "sort", f+ " asc"),
- "*[count(//doc)=2]");
- });
+ RuntimeException outerEx =
+ expectThrows(
+ RuntimeException.class,
+ () -> {
+ ignoreException("sortabuse");
+ assertQ(
+ "sort on something that shouldn't work",
+ req("q", "*:*", "sort", f + " asc"),
+ "*[count(//doc)=2]");
+ });
Throwable root = getRootCause(outerEx);
- assertEquals("sort exception root cause",
- SolrException.class, root.getClass());
+ assertEquals("sort exception root cause", SolrException.class, root.getClass());
SolrException e = (SolrException) root;
- assertEquals("incorrect error type",
- SolrException.ErrorCode.BAD_REQUEST,
- SolrException.ErrorCode.getErrorCode(e.code()));
- assertTrue("exception doesn't contain field name",
- e.getMessage().contains(f));
+ assertEquals(
+ "incorrect error type",
+ SolrException.ErrorCode.BAD_REQUEST,
+ SolrException.ErrorCode.getErrorCode(e.code()));
+ assertTrue("exception doesn't contain field name", e.getMessage().contains(f));
}
}
-
-// /** this doesn't work, but if it did, this is how we'd test it. */
-// public void testOverwriteFalse() {
-
-// assertU(adoc("id", "overwrite", "val_s", "AAA"));
-// assertU(commit());
-
-// assertU(add(doc("id", "overwrite", "val_s", "BBB")
-// ,"allowDups", "false"
-// ,"overwriteCommitted","false"
-// ,"overwritePending","false"
-// ));
-// assertU(commit());
-// assertQ(req("id:overwrite")
-// ,"//*[@numFound='1']"
-// ,"//str[.='AAA']"
-// );
-// }
+ // /** this doesn't work, but if it did, this is how we'd test it. */
+ // public void testOverwriteFalse() {
+
+ // assertU(adoc("id", "overwrite", "val_s", "AAA"));
+ // assertU(commit());
+
+ // assertU(add(doc("id", "overwrite", "val_s", "BBB")
+ // ,"allowDups", "false"
+ // ,"overwriteCommitted","false"
+ // ,"overwritePending","false"
+ // ));
+ // assertU(commit());
+ // assertQ(req("id:overwrite")
+ // ,"//*[@numFound='1']"
+ // ,"//str[.='AAA']"
+ // );
+ // }
}
diff --git a/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java b/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java
index 1ba28ee..c439a7c 100644
--- a/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java
+++ b/solr/core/src/test/org/apache/solr/ConvertedLegacyTest.java
@@ -16,34 +16,31 @@
*/
package org.apache.solr;
+import java.util.*;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.request.*;
import org.apache.solr.util.ErrorLogMuter;
import org.junit.BeforeClass;
import org.junit.Test;
-import java.util.*;
-
-
/**
* This tests was converted from a legacy testing system.
*
- * it does not represent the best practices that should be used when
- * writing Solr JUnit tests
+ * <p>it does not represent the best practices that should be used when writing Solr JUnit tests
*/
public class ConvertedLegacyTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeTests() throws Exception {
- initCore("solrconfig.xml","schema.xml");
+ initCore("solrconfig.xml", "schema.xml");
}
@Test
public void testABunchOfConvertedStuff() {
// these may be reused by things that need a special query
SolrQueryRequest req = null;
- Map<String,String> args = new HashMap<>();
- lrf.args.put(CommonParams.VERSION,"2.2");
+ Map<String, String> args = new HashMap<>();
+ lrf.args.put(CommonParams.VERSION, "2.2");
// compact the index, keep things from getting out of hand
@@ -51,26 +48,17 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
// test query
- assertQ(req("qlkciyopsbgzyvkylsjhchghjrdf")
- ,"//result[@numFound='0']"
- );
+ assertQ(req("qlkciyopsbgzyvkylsjhchghjrdf"), "//result[@numFound='0']");
// test escaping of ";"
assertU("<delete><id>42</id></delete>");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">aa;bb</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"val_s\">aa;bb</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:42 AND val_s:aa\\;bb")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:42 AND val_s:\"aa;bb\"")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:42 AND val_s:\"aa\"")
- ,"//*[@numFound='0']"
- );
-
-
+ assertQ(req("id:42 AND val_s:aa\\;bb"), "//*[@numFound='1']");
+ assertQ(req("id:42 AND val_s:\"aa;bb\""), "//*[@numFound='1']");
+ assertQ(req("id:42 AND val_s:\"aa\""), "//*[@numFound='0']");
// test allowDups default of false
@@ -78,17 +66,11 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">AAA</field></doc></add>");
assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">BBB</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:42")
- ,"//*[@numFound='1'] "
- ,"//str[.='BBB']"
- );
+ assertQ(req("id:42"), "//*[@numFound='1'] ", "//str[.='BBB']");
assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">CCC</field></doc></add>");
assertU("<add><doc><field name=\"id\">42</field><field name=\"val_s\">DDD</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:42")
- ,"//*[@numFound='1'] "
- ,"//str[.='DDD']"
- );
+ assertQ(req("id:42"), "//*[@numFound='1'] ", "//str[.='DDD']");
assertU("<delete><id>42</id></delete>");
// test deletes
@@ -101,910 +83,663 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
assertU("<add overwrite=\"false\"><doc><field name=\"id\">103</field></doc></add>");
assertU("<add overwrite=\"true\"><doc><field name=\"id\">101</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='4']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='4']");
assertU("<delete><id>102</id></delete>");
assertU("<commit/>");
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='3']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='3']");
assertU("<delete><query>id:105</query></delete>");
assertU("<commit/>");
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='2']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='2']");
assertU("<delete><query>id:[100 TO 110]</query></delete>");
assertU("<commit/>");
- assertQ(req("id:[100 TO 110]")
- ,"//*[@numFound='0']"
- );
+ assertQ(req("id:[100 TO 110]"), "//*[@numFound='0']");
// test range
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s1\">apple</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">banana</field><field name=\"val_s1\">banana</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">pear</field><field name=\"val_s1\">pear</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("val_s:[a TO z]")
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=3] "
- ,"//*[@start='0']"
- );
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s1\">apple</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">banana</field><field name=\"val_s1\">banana</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">pear</field><field name=\"val_s1\">pear</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("val_s:[a TO z]"), "//*[@numFound='3'] ", "*[count(//doc)=3] ", "//*[@start='0']");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 2, 5 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=1] "
- ,"*//doc[1]/str[.='pear'] "
- ,"//*[@start='2']"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 2, 5, args);
+ assertQ(
+ req,
+ "//*[@numFound='3'] ",
+ "*[count(//doc)=1] ",
+ "*//doc[1]/str[.='pear'] ",
+ "//*[@start='2']");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 3, 5 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 3, 5, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 4, 5 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 4, 5, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 25, 5 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 25, 5, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 1 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=1] "
- ,"*//doc[1]/str[.='apple']"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 0, 1, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=1] ", "*//doc[1]/str[.='apple']");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 2 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=2] "
- ,"*//doc[2]/str[.='banana']"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 0, 2, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=2] ", "*//doc[2]/str[.='banana']");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 1, 1 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=1] "
- ,"*//doc[1]/str[.='banana']"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 1, 1, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=1] ", "*//doc[1]/str[.='banana']");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 3, 1 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 3, 1, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 4, 1 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 4, 1, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 1, 0 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 1, 0, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 0 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 0, 0, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- args.put("sort","val_s1 asc");
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 0 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
+ args.put("sort", "val_s1 asc");
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 0, 0, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
args = new HashMap<>();
- args.put("sort","val_s1 desc");
- req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]",
- "/select", 0, 0 , args);
- assertQ(req
- ,"//*[@numFound='3'] "
- ,"*[count(//doc)=0]"
- );
- assertQ(req("val_s:[a TO b]")
- ,"//*[@numFound='1']"
- );
- assertQ(req("val_s:[a TO cat]")
- ,"//*[@numFound='2']"
- );
- assertQ(req("val_s:[a TO *]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:[* TO z]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:[* TO *]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:[apple TO pear]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:[bear TO boar]")
- ,"//*[@numFound='0']"
- );
- assertQ(req("val_s:[a TO a]")
- ,"//*[@numFound='0']"
- );
- assertQ(req("val_s:[apple TO apple]")
- ,"//*[@numFound='1']"
- );
- assertQ(req("val_s:{apple TO pear}")
- ,"//*[@numFound='1']"
- );
- assertQ(req("val_s:{a TO z}")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:{* TO *}")
- ,"//*[@numFound='3']"
- );
+ args.put("sort", "val_s1 desc");
+ req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z]", "/select", 0, 0, args);
+ assertQ(req, "//*[@numFound='3'] ", "*[count(//doc)=0]");
+ assertQ(req("val_s:[a TO b]"), "//*[@numFound='1']");
+ assertQ(req("val_s:[a TO cat]"), "//*[@numFound='2']");
+ assertQ(req("val_s:[a TO *]"), "//*[@numFound='3']");
+ assertQ(req("val_s:[* TO z]"), "//*[@numFound='3']");
+ assertQ(req("val_s:[* TO *]"), "//*[@numFound='3']");
+ assertQ(req("val_s:[apple TO pear]"), "//*[@numFound='3']");
+ assertQ(req("val_s:[bear TO boar]"), "//*[@numFound='0']");
+ assertQ(req("val_s:[a TO a]"), "//*[@numFound='0']");
+ assertQ(req("val_s:[apple TO apple]"), "//*[@numFound='1']");
+ assertQ(req("val_s:{apple TO pear}"), "//*[@numFound='1']");
+ assertQ(req("val_s:{a TO z}"), "//*[@numFound='3']");
+ assertQ(req("val_s:{* TO *}"), "//*[@numFound='3']");
// test rangequery within a boolean query
- assertQ(req("id:44 AND val_s:[a TO z]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("id:44 OR val_s:[a TO z]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:[a TO b] OR val_s:[b TO z]")
- ,"//*[@numFound='3']"
- );
- assertQ(req("+val_s:[a TO b] -val_s:[b TO z]")
- ,"//*[@numFound='1']"
- );
- assertQ(req("-val_s:[a TO b] +val_s:[b TO z]")
- ,"//*[@numFound='2']"
- );
- assertQ(req("val_s:[a TO c] AND val_s:[apple TO z]")
- ,"//*[@numFound='2']"
- );
- assertQ(req("val_s:[a TO c] AND val_s:[a TO apple]")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:44 AND (val_s:[a TO c] AND val_s:[a TO apple])")
- ,"//*[@numFound='1']"
- );
- assertQ(req("(val_s:[apple TO apple] OR val_s:[a TO c]) AND (val_s:[b TO c] OR val_s:[b TO b])")
- ,"//*[@numFound='1'] "
- ,"//str[.='banana']"
- );
- assertQ(req("(val_s:[apple TO apple] AND val_s:[a TO c]) OR (val_s:[p TO z] AND val_s:[a TO z])")
- ,"//*[@numFound='2'] "
- ,"//str[.='apple'] "
- ,"//str[.='pear']"
- );
+ assertQ(req("id:44 AND val_s:[a TO z]"), "//*[@numFound='3']");
+ assertQ(req("id:44 OR val_s:[a TO z]"), "//*[@numFound='3']");
+ assertQ(req("val_s:[a TO b] OR val_s:[b TO z]"), "//*[@numFound='3']");
+ assertQ(req("+val_s:[a TO b] -val_s:[b TO z]"), "//*[@numFound='1']");
+ assertQ(req("-val_s:[a TO b] +val_s:[b TO z]"), "//*[@numFound='2']");
+ assertQ(req("val_s:[a TO c] AND val_s:[apple TO z]"), "//*[@numFound='2']");
+ assertQ(req("val_s:[a TO c] AND val_s:[a TO apple]"), "//*[@numFound='1']");
+ assertQ(req("id:44 AND (val_s:[a TO c] AND val_s:[a TO apple])"), "//*[@numFound='1']");
+ assertQ(
+ req("(val_s:[apple TO apple] OR val_s:[a TO c]) AND (val_s:[b TO c] OR val_s:[b TO b])"),
+ "//*[@numFound='1'] ",
+ "//str[.='banana']");
+ assertQ(
+ req("(val_s:[apple TO apple] AND val_s:[a TO c]) OR (val_s:[p TO z] AND val_s:[a TO z])"),
+ "//*[@numFound='2'] ",
+ "//str[.='apple'] ",
+ "//str[.='pear']");
// check for docs that appear more than once in a range
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s\">banana</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s\">banana</field></doc></add>");
assertU("<commit/>");
- assertQ(req("val_s:[* TO *] OR val_s:[* TO *]")
- ,"//*[@numFound='4']"
- );
- assertQ(req("val_s:[* TO *] AND val_s:[* TO *]")
- ,"//*[@numFound='4']"
- );
- assertQ(req("val_s:[* TO *]")
- ,"//*[@numFound='4']"
- );
-
+ assertQ(req("val_s:[* TO *] OR val_s:[* TO *]"), "//*[@numFound='4']");
+ assertQ(req("val_s:[* TO *] AND val_s:[* TO *]"), "//*[@numFound='4']");
+ assertQ(req("val_s:[* TO *]"), "//*[@numFound='4']");
// <delete><id>44</id></delete>
- assertU("<add><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44 AND red")
- ,"//@numFound[.='1'] "
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:44 AND ride")
- ,"//@numFound[.='1']"
- );
- assertQ(req("id:44 AND blue")
- ,"//@numFound[.='0']"
- );
+ assertQ(req("id:44 AND red"), "//@numFound[.='1'] ", "*[count(//doc)=1]");
+ assertQ(req("id:44 AND ride"), "//@numFound[.='1']");
+ assertQ(req("id:44 AND blue"), "//@numFound[.='0']");
// allow duplicates
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">big bad wolf</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">red riding hood</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"text\">big bad wolf</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//@numFound[.='2']"
- );
- assertQ(req("id:44 AND red")
- ,"//@numFound[.='1'] "
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:44 AND wolf")
- ,"//@numFound[.='1'] "
- ,"*[count(//doc)=1]"
- );
- assertQ(req("+id:44 red wolf")
- ,"//@numFound[.='2']"
- );
+ assertQ(req("id:44"), "//@numFound[.='2']");
+ assertQ(req("id:44 AND red"), "//@numFound[.='1'] ", "*[count(//doc)=1]");
+ assertQ(req("id:44 AND wolf"), "//@numFound[.='1'] ", "*[count(//doc)=1]");
+ assertQ(req("+id:44 red wolf"), "//@numFound[.='2']");
// test removal of multiples w/o adding anything else
assertU("<delete><id>44</id></delete>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//@numFound[.='0']"
- );
+ assertQ(req("id:44"), "//@numFound[.='0']");
// untokenized string type
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"ssto\">and a 10.4 ?</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"ssto\">and a 10.4 ?</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//str[.='and a 10.4 ?']"
- );
+ assertQ(req("id:44"), "//str[.='and a 10.4 ?']");
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"sind\">abc123</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"sind\">abc123</field></doc></add>");
assertU("<commit/>");
// TODO: how to search for something with spaces....
- assertQ(req("sind:abc123")
- ,"//@numFound[.='1'] "
- ,"*[count(//@name[.='sind'])=0] "
- ,"*[count(//@name[.='id'])=1]"
- );
+ assertQ(
+ req("sind:abc123"),
+ "//@numFound[.='1'] ",
+ "*[count(//@name[.='sind'])=0] ",
+ "*[count(//@name[.='id'])=1]");
assertU("<delete><id>44</id></delete>");
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"sindsto\">abc123</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"sindsto\">abc123</field></doc></add>");
assertU("<commit/>");
// TODO: how to search for something with spaces....
- assertQ(req("sindsto:abc123")
- ,"//str[.='abc123']"
- );
+ assertQ(req("sindsto:abc123"), "//str[.='abc123']");
// test output of multivalued fields
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"title\">yonik3</field><field name=\"title\" boost=\"2\">yonik4</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"title\">yonik3</field><field name=\"title\" boost=\"2\">yonik4</field></doc></add>");
assertU("<commit></commit>");
- assertQ(req("id:44")
- ,"//arr[@name='title'][./str='yonik3' and ./str='yonik4'] "
- ,"*[count(//@name[.='title'])=1]"
- );
- assertQ(req("title:yonik3")
- ,"//@numFound[.>'0']"
- );
- assertQ(req("title:yonik4")
- ,"//@numFound[.>'0']"
- );
- assertQ(req("title:yonik5")
- ,"//@numFound[.='0']"
- );
+ assertQ(
+ req("id:44"),
+ "//arr[@name='title'][./str='yonik3' and ./str='yonik4'] ",
+ "*[count(//@name[.='title'])=1]");
+ assertQ(req("title:yonik3"), "//@numFound[.>'0']");
+ assertQ(req("title:yonik4"), "//@numFound[.>'0']");
+ assertQ(req("title:yonik5"), "//@numFound[.='0']");
assertU("<delete><query>title:yonik4</query></delete>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//@numFound[.='0']"
- );
-
+ assertQ(req("id:44"), "//@numFound[.='0']");
// not visible until commit
assertU("<delete><id>44</id></delete>");
assertU("<commit/>");
assertU("<add><doc><field name=\"id\">44</field></doc></add>");
- assertQ(req("id:44")
- ,"//@numFound[.='0']"
- );
+ assertQ(req("id:44"), "//@numFound[.='0']");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//@numFound[.='1']"
- );
+ assertQ(req("id:44"), "//@numFound[.='1']");
// test configurable stop words
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"teststop\">world stopworda view</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"teststop\">world stopworda view</field></doc></add>");
assertU("<commit/>");
- assertQ(req("+id:44 +teststop:world")
- ,"//@numFound[.='1']"
- );
- assertQ(req("teststop:stopworda")
- ,"//@numFound[.='0']"
- );
+ assertQ(req("+id:44 +teststop:world"), "//@numFound[.='1']");
+ assertQ(req("teststop:stopworda"), "//@numFound[.='0']");
// test ignoreCase stop words
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"stopfilt\">world AnD view</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"stopfilt\">world AnD view</field></doc></add>");
assertU("<commit/>");
- assertQ(req("+id:44 +stopfilt:world")
- ,"//@numFound[.='1']"
- );
- assertQ(req("stopfilt:\"and\"")
- ,"//@numFound[.='0']"
- );
- assertQ(req("stopfilt:\"AND\"")
- ,"//@numFound[.='0']"
- );
- assertQ(req("stopfilt:\"AnD\"")
- ,"//@numFound[.='0']"
- );
+ assertQ(req("+id:44 +stopfilt:world"), "//@numFound[.='1']");
+ assertQ(req("stopfilt:\"and\""), "//@numFound[.='0']");
+ assertQ(req("stopfilt:\"AND\""), "//@numFound[.='0']");
+ assertQ(req("stopfilt:\"AnD\""), "//@numFound[.='0']");
// test dynamic field types
assertU("<delete fromPending=\"true\" fromCommitted=\"true\"><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"gack_i\">51778</field><field name=\"t_name\">cats</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"gack_i\">51778</field><field name=\"t_name\">cats</field></doc></add>");
assertU("<commit/>");
// test if the dyn fields got added
- assertQ(req("id:44")
- ,"*[count(//doc/*)>=3] "
- ,"//arr[@name='gack_i']/int[.='51778'] "
- ,"//arr[@name='t_name']/str[.='cats']"
- );
+ assertQ(
+ req("id:44"),
+ "*[count(//doc/*)>=3] ",
+ "//arr[@name='gack_i']/int[.='51778'] ",
+ "//arr[@name='t_name']/str[.='cats']");
// now test if we can query by a dynamic field (requires analyzer support)
- assertQ(req("t_name:cat")
- ,"//arr[@name='t_name' and .='cats']/str"
- );
+ assertQ(req("t_name:cat"), "//arr[@name='t_name' and .='cats']/str");
// check that deleteByQuery works for dynamic fields
assertU("<delete><query>t_name:cat</query></delete>");
assertU("<commit/>");
- assertQ(req("t_name:cat")
- ,"//@numFound[.='0']"
- );
+ assertQ(req("t_name:cat"), "//@numFound[.='0']");
// test that longest dynamic field match happens first
- assertU("<add><doc><field name=\"id\">44</field><field name=\"xaa\">mystr</field><field name=\"xaaa\">12321</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"xaa\">mystr</field><field name=\"xaaa\">12321</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//arr[@name='xaa'][.='mystr']/str "
- ,"//arr[@name='xaaa'][.='12321']/int"
- );
-
+ assertQ(
+ req("id:44"), "//arr[@name='xaa'][.='mystr']/str ", "//arr[@name='xaaa'][.='12321']/int");
// test integer ranges and sorting
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1234567890</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">10</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">15</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-987654321</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2147483647</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-2147483648</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">0</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:44")
- ,"*[count(//doc)=10]"
- );
- assertQ(req("num_i1:2147483647")
- ,"//@numFound[.='1'] "
- ,"//int[.='2147483647']"
- );
- assertQ(req("num_i1:\"-2147483648\"")
- ,"//@numFound[.='1'] "
- ,"//int[.='-2147483648']"
- );
- assertQ(req("q", "id:44", "sort","num_i1 asc")
- ,"//doc[1]/int[.='-2147483648'] "
- ,"//doc[last()]/int[.='2147483647']"
- );
- assertQ(req("q","id:44","sort","num_i1 desc")
- ,"//doc[1]/int[.='2147483647'] "
- ,"//doc[last()]/int[.='-2147483648']"
- );
- assertQ(req("num_i1:[0 TO 9]")
- ,"*[count(//doc)=3]"
- );
- assertQ(req("num_i1:[-2147483648 TO 2147483647]")
- ,"*[count(//doc)=10]"
- );
- assertQ(req("num_i1:[-10 TO -1]")
- ,"*[count(//doc)=1]"
- );
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1234567890</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">10</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">15</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-987654321</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2147483647</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-2147483648</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">0</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:44"), "*[count(//doc)=10]");
+ assertQ(req("num_i1:2147483647"), "//@numFound[.='1'] ", "//int[.='2147483647']");
+ assertQ(req("num_i1:\"-2147483648\""), "//@numFound[.='1'] ", "//int[.='-2147483648']");
+ assertQ(
+ req("q", "id:44", "sort", "num_i1 asc"),
+ "//doc[1]/int[.='-2147483648'] ",
+ "//doc[last()]/int[.='2147483647']");
+ assertQ(
+ req("q", "id:44", "sort", "num_i1 desc"),
+ "//doc[1]/int[.='2147483647'] ",
+ "//doc[last()]/int[.='-2147483648']");
+ assertQ(req("num_i1:[0 TO 9]"), "*[count(//doc)=3]");
+ assertQ(req("num_i1:[-2147483648 TO 2147483647]"), "*[count(//doc)=10]");
+ assertQ(req("num_i1:[-10 TO -1]"), "*[count(//doc)=1]");
// test long ranges and sorting
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1234567890</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">10</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">2</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">15</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-987654321</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">9223372036854775807</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-9223372036854775808</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">0</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:44")
- ,"*[count(//doc)=10]"
- );
- assertQ(req("num_l1:9223372036854775807")
- ,"//@numFound[.='1'] "
- ,"//long[.='9223372036854775807']"
- );
- assertQ(req("num_l1:\"-9223372036854775808\"")
- ,"//@numFound[.='1'] "
- ,"//long[.='-9223372036854775808']"
- );
- assertQ(req("q","id:44","sort","num_l1 asc")
- ,"//doc[1]/long[.='-9223372036854775808'] "
- ,"//doc[last()]/long[.='9223372036854775807']"
- );
- assertQ(req("q","id:44", "sort", "num_l1 desc")
- ,"//doc[1]/long[.='9223372036854775807'] "
- ,"//doc[last()]/long[.='-9223372036854775808']"
- );
- assertQ(req("num_l1:[-1 TO 9]")
- ,"*[count(//doc)=4]"
- );
- assertQ(req("num_l1:[-9223372036854775808 TO 9223372036854775807]")
- ,"*[count(//doc)=10]"
- );
- assertQ(req("num_l1:[-10 TO -1]")
- ,"*[count(//doc)=1]"
- );
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1234567890</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">10</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">2</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">15</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-987654321</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">9223372036854775807</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-9223372036854775808</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">0</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:44"), "*[count(//doc)=10]");
+ assertQ(
+ req("num_l1:9223372036854775807"),
+ "//@numFound[.='1'] ",
+ "//long[.='9223372036854775807']");
+ assertQ(
+ req("num_l1:\"-9223372036854775808\""),
+ "//@numFound[.='1'] ",
+ "//long[.='-9223372036854775808']");
+ assertQ(
+ req("q", "id:44", "sort", "num_l1 asc"),
+ "//doc[1]/long[.='-9223372036854775808'] ",
+ "//doc[last()]/long[.='9223372036854775807']");
+ assertQ(
+ req("q", "id:44", "sort", "num_l1 desc"),
+ "//doc[1]/long[.='9223372036854775807'] ",
+ "//doc[last()]/long[.='-9223372036854775808']");
+ assertQ(req("num_l1:[-1 TO 9]"), "*[count(//doc)=4]");
+ assertQ(req("num_l1:[-9223372036854775808 TO 9223372036854775807]"), "*[count(//doc)=10]");
+ assertQ(req("num_l1:[-10 TO -1]"), "*[count(//doc)=1]");
// test binary float ranges and sorting
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">1.4142135</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">Infinity</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-Infinity</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">NaN</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">2</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-987654321</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-999999.99</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-1e20</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">0</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:44")
- ,"*[count(//doc)=10]"
- );
- assertQ(req("num_f1:Infinity")
- ,"//@numFound[.='1'] "
- ,"//float[.='Infinity']"
- );
- assertQ(req("num_f1:\"-Infinity\"")
- ,"//@numFound[.='1'] "
- ,"//float[.='-Infinity']"
- );
- assertQ(req("num_f1:\"NaN\"")
- ,"//@numFound[.='1'] "
- ,"//float[.='NaN']"
- );
- assertQ(req("num_f1:\"-1e20\"")
- ,"//@numFound[.='1']"
- );
- assertQ(req("q", "id:44", "sort", "num_f1 asc")
- ,"//doc[1]/float[.='-Infinity'] "
- ,"//doc[last()]/float[.='NaN']"
- );
- assertQ(req("q", "id:44", "sort","num_f1 desc")
- ,"//doc[1]/float[.='NaN'] "
- ,"//doc[last()]/float[.='-Infinity']"
- );
- assertQ(req("num_f1:[-1 TO 2]")
- ,"*[count(//doc)=4]"
- );
- assertQ(req("num_f1:[-Infinity TO Infinity]")
- ,"*[count(//doc)=9]"
- );
-
-
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">1.4142135</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">Infinity</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-Infinity</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">NaN</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">2</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-987654321</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-999999.99</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">-1e20</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_f1\">0</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:44"), "*[count(//doc)=10]");
+ assertQ(req("num_f1:Infinity"), "//@numFound[.='1'] ", "//float[.='Infinity']");
+ assertQ(req("num_f1:\"-Infinity\""), "//@numFound[.='1'] ", "//float[.='-Infinity']");
+ assertQ(req("num_f1:\"NaN\""), "//@numFound[.='1'] ", "//float[.='NaN']");
+ assertQ(req("num_f1:\"-1e20\""), "//@numFound[.='1']");
+ assertQ(
+ req("q", "id:44", "sort", "num_f1 asc"),
+ "//doc[1]/float[.='-Infinity'] ",
+ "//doc[last()]/float[.='NaN']");
+ assertQ(
+ req("q", "id:44", "sort", "num_f1 desc"),
+ "//doc[1]/float[.='NaN'] ",
+ "//doc[last()]/float[.='-Infinity']");
+ assertQ(req("num_f1:[-1 TO 2]"), "*[count(//doc)=4]");
+ assertQ(req("num_f1:[-Infinity TO Infinity]"), "*[count(//doc)=9]");
// test binary double ranges and sorting
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">1.4142135</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">Infinity</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-Infinity</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">NaN</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">2</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">1e-100</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-999999.99</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-1e100</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">0</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:44")
- ,"*[count(//doc)=10]"
- );
- assertQ(req("num_d1:Infinity")
- ,"//@numFound[.='1'] "
- ,"//double[.='Infinity']"
- );
- assertQ(req("num_d1:\"-Infinity\"")
- ,"//@numFound[.='1'] "
- ,"//double[.='-Infinity']"
- );
- assertQ(req("num_d1:\"NaN\"")
- ,"//@numFound[.='1'] "
- ,"//double[.='NaN']"
- );
- assertQ(req("num_d1:\"-1e100\"")
- ,"//@numFound[.='1']"
- );
- assertQ(req("num_d1:\"1e-100\"")
- ,"//@numFound[.='1']"
- );
- assertQ(req("q", "id:44", "sort", "num_d1 asc")
- ,"//doc[1]/double[.='-Infinity'] "
- ,"//doc[last()]/double[.='NaN']"
- );
- assertQ(req("q","id:44","sort","num_d1 desc")
- ,"//doc[1]/double[.='NaN'] "
- ,"//doc[last()]/double[.='-Infinity']"
- );
- assertQ(req("num_d1:[-1 TO 2]")
- ,"*[count(//doc)=5]"
- );
- assertQ(req("num_d1:[-Infinity TO Infinity]")
- ,"*[count(//doc)=9]"
- );
-
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">1.4142135</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">Infinity</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-Infinity</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">NaN</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">2</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">1e-100</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-999999.99</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">-1e100</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_d1\">0</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:44"), "*[count(//doc)=10]");
+ assertQ(req("num_d1:Infinity"), "//@numFound[.='1'] ", "//double[.='Infinity']");
+ assertQ(req("num_d1:\"-Infinity\""), "//@numFound[.='1'] ", "//double[.='-Infinity']");
+ assertQ(req("num_d1:\"NaN\""), "//@numFound[.='1'] ", "//double[.='NaN']");
+ assertQ(req("num_d1:\"-1e100\""), "//@numFound[.='1']");
+ assertQ(req("num_d1:\"1e-100\""), "//@numFound[.='1']");
+ assertQ(
+ req("q", "id:44", "sort", "num_d1 asc"),
+ "//doc[1]/double[.='-Infinity'] ",
+ "//doc[last()]/double[.='NaN']");
+ assertQ(
+ req("q", "id:44", "sort", "num_d1 desc"),
+ "//doc[1]/double[.='NaN'] ",
+ "//doc[last()]/double[.='-Infinity']");
+ assertQ(req("num_d1:[-1 TO 2]"), "*[count(//doc)=5]");
+ assertQ(req("num_d1:[-Infinity TO Infinity]"), "*[count(//doc)=9]");
// test sorting on multiple fields
assertU("<delete><id>44</id></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">10</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">-1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">15</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">0</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:44")
- ,"*[count(//doc)=6]"
- );
-
- assertQ(req("q","id:44", "sort", "a_i1 asc,b_i1 desc")
- ,"*[count(//doc)=6] "
- ,"//doc[3]/int[.='100'] "
- ,"//doc[4]/int[.='50']"
- );
- assertQ(req("q","id:44", "sort", "a_i1 asc , b_i1 asc")
- ,"*[count(//doc)=6] "
- ,"//doc[3]/int[.='50'] "
- ,"//doc[4]/int[.='100']"
- );
- assertQ(req("q", "id:44", "sort", "a_i1 asc")
- ,"*[count(//doc)=6] "
- ,"//doc[1]/int[.='-1'] "
- ,"//doc[last()]/int[.='15']"
- );
- assertQ(req("q","id:44","sort","a_i1 asc , score top")
- ,"*[count(//doc)=6] "
- ,"//doc[1]/int[.='-1'] "
- ,"//doc[last()]/int[.='15']"
- );
- assertQ(req("q","id:44","sort","score top , a_i1 top, b_i1 bottom ")
- ,"*[count(//doc)=6] "
- ,"//doc[last()]/int[.='-1'] "
- ,"//doc[1]/int[.='15'] "
- ,"//doc[3]/int[.='50'] "
- ,"//doc[4]/int[.='100']"
- );
-
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">10</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">-1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">15</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">0</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:44"), "*[count(//doc)=6]");
+
+ assertQ(
+ req("q", "id:44", "sort", "a_i1 asc,b_i1 desc"),
+ "*[count(//doc)=6] ",
+ "//doc[3]/int[.='100'] ",
+ "//doc[4]/int[.='50']");
+ assertQ(
+ req("q", "id:44", "sort", "a_i1 asc , b_i1 asc"),
+ "*[count(//doc)=6] ",
+ "//doc[3]/int[.='50'] ",
+ "//doc[4]/int[.='100']");
+ assertQ(
+ req("q", "id:44", "sort", "a_i1 asc"),
+ "*[count(//doc)=6] ",
+ "//doc[1]/int[.='-1'] ",
+ "//doc[last()]/int[.='15']");
+ assertQ(
+ req("q", "id:44", "sort", "a_i1 asc , score top"),
+ "*[count(//doc)=6] ",
+ "//doc[1]/int[.='-1'] ",
+ "//doc[last()]/int[.='15']");
+ assertQ(
+ req("q", "id:44", "sort", "score top , a_i1 top, b_i1 bottom "),
+ "*[count(//doc)=6] ",
+ "//doc[last()]/int[.='-1'] ",
+ "//doc[1]/int[.='15'] ",
+ "//doc[3]/int[.='50'] ",
+ "//doc[4]/int[.='100']");
// test sorting with some docs missing the sort field
assertU("<delete><query>id_i:[1000 TO 1010]</query></delete>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1000</field><field name=\"a_i1\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1001</field><field name=\"a_i1\">10</field><field name=\"nullfirst\">A</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1002</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1003</field><field name=\"a_i1\">-1</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1004</field><field name=\"a_i1\">15</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1005</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
- assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1006</field><field name=\"a_i1\">0</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id_i:[1000 TO 1010]")
- ,"*[count(//doc)=7]"
- );
- assertQ(req("q","id_i:[1000 TO 1010]","sort","b_i1 asc")
- ,"*[count(//doc)=7] "
- ,"//doc[1]/int[.='50'] "
- ,"//doc[2]/int[.='100']"
- );
- assertQ(req("q","id_i:[1000 TO 1010]","sort"," b_i1 desc")
- ,"*[count(//doc)=7] "
- ,"//doc[1]/int[.='100'] "
- ,"//doc[2]/int[.='50']"
- );
- assertQ(req("q","id_i:[1000 TO 1010]","sort"," a_i1 asc,b_i1 desc")
- ,"*[count(//doc)=7] "
- ,"//doc[3]/int[@name='b_i1' and .='100'] "
- ,"//doc[4]/int[@name='b_i1' and .='50'] "
- ,"//doc[5]/arr[@name='id_i' and .='1000']"
- );
- assertQ(req("q","id_i:[1000 TO 1010]","sort"," a_i1 asc,b_i1 asc")
- ,"*[count(//doc)=7] "
- ,"//doc[3]/int[@name='b_i1' and .='50'] "
- ,"//doc[4]/int[@name='b_i1' and .='100'] "
- ,"//doc[5]/arr[@name='id_i' and .='1000']"
- );
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1000</field><field name=\"a_i1\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1001</field><field name=\"a_i1\">10</field><field name=\"nullfirst\">A</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1002</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1003</field><field name=\"a_i1\">-1</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1004</field><field name=\"a_i1\">15</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1005</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
+ assertU(
+ "<add overwrite=\"false\"><doc><field name=\"id_i\">1006</field><field name=\"a_i1\">0</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id_i:[1000 TO 1010]"), "*[count(//doc)=7]");
+ assertQ(
+ req("q", "id_i:[1000 TO 1010]", "sort", "b_i1 asc"),
+ "*[count(//doc)=7] ",
+ "//doc[1]/int[.='50'] ",
+ "//doc[2]/int[.='100']");
+ assertQ(
+ req("q", "id_i:[1000 TO 1010]", "sort", " b_i1 desc"),
+ "*[count(//doc)=7] ",
+ "//doc[1]/int[.='100'] ",
+ "//doc[2]/int[.='50']");
+ assertQ(
+ req("q", "id_i:[1000 TO 1010]", "sort", " a_i1 asc,b_i1 desc"),
+ "*[count(//doc)=7] ",
+ "//doc[3]/int[@name='b_i1' and .='100'] ",
+ "//doc[4]/int[@name='b_i1' and .='50'] ",
+ "//doc[5]/arr[@name='id_i' and .='1000']");
+ assertQ(
+ req("q", "id_i:[1000 TO 1010]", "sort", " a_i1 asc,b_i1 asc"),
+ "*[count(//doc)=7] ",
+ "//doc[3]/int[@name='b_i1' and .='50'] ",
+ "//doc[4]/int[@name='b_i1' and .='100'] ",
+ "//doc[5]/arr[@name='id_i' and .='1000']");
// nullfirst tests
- assertQ(req("q","id_i:[1000 TO 1002]","sort"," nullfirst asc")
- ,"*[count(//doc)=3] "
- ,"//doc[1]/arr[@name='id_i' and .='1002']"
- ,"//doc[2]/arr[@name='id_i' and .='1001'] "
- ,"//doc[3]/arr[@name='id_i' and .='1000']"
- );
- assertQ(req("q","id_i:[1000 TO 1002]","sort"," nullfirst desc")
- ,"*[count(//doc)=3] "
- ,"//doc[1]/arr[@name='id_i' and .='1002']"
- ,"//doc[2]/arr[@name='id_i' and .='1000'] "
- ,"//doc[3]/arr[@name='id_i' and .='1001']"
- );
+ assertQ(
+ req("q", "id_i:[1000 TO 1002]", "sort", " nullfirst asc"),
+ "*[count(//doc)=3] ",
+ "//doc[1]/arr[@name='id_i' and .='1002']",
+ "//doc[2]/arr[@name='id_i' and .='1001'] ",
+ "//doc[3]/arr[@name='id_i' and .='1000']");
+ assertQ(
+ req("q", "id_i:[1000 TO 1002]", "sort", " nullfirst desc"),
+ "*[count(//doc)=3] ",
+ "//doc[1]/arr[@name='id_i' and .='1002']",
+ "//doc[2]/arr[@name='id_i' and .='1000'] ",
+ "//doc[3]/arr[@name='id_i' and .='1001']");
// Sort parsing exception tests. (SOLR-6, SOLR-99)
try (ErrorLogMuter errors = ErrorLogMuter.substring("shouldbeunindexed")) {
- assertQEx( "can not sort unindexed fields",
- req( "q","id_i:1000", "sort", "shouldbeunindexed asc" ), 400 );
+ assertQEx(
+ "can not sort unindexed fields",
+ req("q", "id_i:1000", "sort", "shouldbeunindexed asc"),
+ 400);
assertEquals(1, errors.getCount());
}
-
+
try (ErrorLogMuter errors = ErrorLogMuter.substring("nullfirst")) {
- assertQEx( "invalid query format",
- req( "q","id_i:1000", "sort", "nullfirst" ), 400 );
+ assertQEx("invalid query format", req("q", "id_i:1000", "sort", "nullfirst"), 400);
assertEquals(1, errors.getCount());
}
try (ErrorLogMuter abc = ErrorLogMuter.substring("abcde12345");
- ErrorLogMuter aaa = ErrorLogMuter.substring("aaa")) {
- assertQEx( "unknown sort field",
- req( "q","id_i:1000", "sort", "abcde12345 asc" ), 400 );
+ ErrorLogMuter aaa = ErrorLogMuter.substring("aaa")) {
+ assertQEx("unknown sort field", req("q", "id_i:1000", "sort", "abcde12345 asc"), 400);
+
+ assertQEx("unknown sort order", req("q", "id_i:1000", "sort", "nullfirst aaa"), 400);
- assertQEx( "unknown sort order",
- req( "q","id_i:1000", "sort", "nullfirst aaa" ), 400 );
-
assertEquals(1, abc.getCount());
assertEquals(1, aaa.getCount());
}
-
+
// test prefix query
assertU("<delete><query>val_s:[* TO *]</query></delete>");
- assertU("<add><doc><field name=\"id\">100</field><field name=\"val_s\">apple</field></doc></add>");
- assertU("<add><doc><field name=\"id\">101</field><field name=\"val_s\">banana</field></doc></add>");
- assertU("<add><doc><field name=\"id\">102</field><field name=\"val_s\">apple</field></doc></add>");
- assertU("<add><doc><field name=\"id\">103</field><field name=\"val_s\">pearing</field></doc></add>");
- assertU("<add><doc><field name=\"id\">104</field><field name=\"val_s\">pear</field></doc></add>");
- assertU("<add><doc><field name=\"id\">105</field><field name=\"val_s\">appalling</field></doc></add>");
- assertU("<add><doc><field name=\"id\">106</field><field name=\"val_s\">pearson</field></doc></add>");
- assertU("<add><doc><field name=\"id\">107</field><field name=\"val_s\">port</field></doc></add>");
- assertU("<commit/>");
-
- assertQ(req("val_s:a*")
- ,"//*[@numFound='3']"
- );
- assertQ(req("val_s:p*")
- ,"//*[@numFound='4']"
- );
+ assertU(
+ "<add><doc><field name=\"id\">100</field><field name=\"val_s\">apple</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">101</field><field name=\"val_s\">banana</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">102</field><field name=\"val_s\">apple</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">103</field><field name=\"val_s\">pearing</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">104</field><field name=\"val_s\">pear</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">105</field><field name=\"val_s\">appalling</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">106</field><field name=\"val_s\">pearson</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">107</field><field name=\"val_s\">port</field></doc></add>");
+ assertU("<commit/>");
+
+ assertQ(req("val_s:a*"), "//*[@numFound='3']");
+ assertQ(req("val_s:p*"), "//*[@numFound='4']");
// val_s:* %//*[@numFound="8"]
// test wildcard query
- assertQ(req("val_s:a*p*") ,"//*[@numFound='3']");
- assertQ(req("val_s:p?a*") ,"//*[@numFound='3']");
+ assertQ(req("val_s:a*p*"), "//*[@numFound='3']");
+ assertQ(req("val_s:p?a*"), "//*[@numFound='3']");
assertU("<delete><query>id:[100 TO 110]</query></delete>");
// test copyField functionality
- assertU("<add><doc><field name=\"id\">42</field><field name=\"title\">How Now4 brown Cows</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"title\">How Now4 brown Cows</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:42 AND title:Now")
- ,"*[count(//doc)=0]"
- );
- assertQ(req("id:42 AND title_lettertok:Now")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND title:cow")
- ,"*[count(//doc)=0]"
- );
- assertQ(req("id:42 AND title_stemmed:cow")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND text:cow")
- ,"*[count(//doc)=1]"
- );
+ assertQ(req("id:42 AND title:Now"), "*[count(//doc)=0]");
+ assertQ(req("id:42 AND title_lettertok:Now"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND title:cow"), "*[count(//doc)=0]");
+ assertQ(req("id:42 AND title_stemmed:cow"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND text:cow"), "*[count(//doc)=1]");
// test copyField functionality with a pattern.
- assertU("<add><doc><field name=\"id\">42</field><field name=\"copy_t\">Copy me to the text field pretty please.</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"copy_t\">Copy me to the text field pretty please.</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:42 AND text:pretty")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND copy_t:pretty")
- ,"*[count(//doc)=1]"
- );
-
+ assertQ(req("id:42 AND text:pretty"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND copy_t:pretty"), "*[count(//doc)=1]");
+
// test slop
- assertU("<add><doc><field name=\"id\">42</field><field name=\"text\">foo bar</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"text\">foo bar</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:42 AND text:\"foo bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND text:\"foo\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND text:\"bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND text:\"bar foo\"")
- ,"*[count(//doc)=0]"
- );
- assertQ(req("id:42 AND text:\"bar foo\"~2")
- ,"*[count(//doc)=1]"
- );
-
+ assertQ(req("id:42 AND text:\"foo bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND text:\"foo\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND text:\"bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND text:\"bar foo\""), "*[count(//doc)=0]");
+ assertQ(req("id:42 AND text:\"bar foo\"~2"), "*[count(//doc)=1]");
// intra-word delimiter testing (WordDelimiterGraphFilter)
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">foo bar</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:\"foo bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"foo\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"bar foo\"")
- ,"*[count(//doc)=0]"
- );
- assertQ(req("id:42 AND subword:\"bar foo\"~2")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"foo/bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:foobar")
- ,"*[count(//doc)=0]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">foo-bar</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:\"foo bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"foo\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"bar foo\"")
- ,"*[count(//doc)=0]"
- );
- assertQ(req("id:42 AND subword:\"bar foo\"~2")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"foo/bar\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:foobar")
- ,"*[count(//doc)=1]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Canon PowerShot SD500 7MP</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:\"power-shot\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"power shot sd 500\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"powershot\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"SD-500\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"SD500\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"SD500-7MP\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"PowerShotSD500-7MP\"")
- ,"*[count(//doc)=1]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Wi-Fi</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:wifi")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:wi+=fi")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:wi+=fi")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:WiFi")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"wi fi\"")
- ,"*[count(//doc)=1]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">'I.B.M' A's,B's,C's</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:\"'I.B.M.'\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:I.B.M")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:IBM")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:I--B--M")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"I B M\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:IBM's")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"IBM'sx\"")
- ,"*[count(//doc)=0]"
- );
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">foo bar</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:\"foo bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"foo\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"bar foo\""), "*[count(//doc)=0]");
+ assertQ(req("id:42 AND subword:\"bar foo\"~2"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"foo/bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:foobar"), "*[count(//doc)=0]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">foo-bar</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:\"foo bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"foo\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"bar foo\""), "*[count(//doc)=0]");
+ assertQ(req("id:42 AND subword:\"bar foo\"~2"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"foo/bar\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:foobar"), "*[count(//doc)=1]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">Canon PowerShot SD500 7MP</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:\"power-shot\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"power shot sd 500\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"powershot\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"SD-500\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"SD500\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"SD500-7MP\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"PowerShotSD500-7MP\""), "*[count(//doc)=1]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">Wi-Fi</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:wifi"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:wi+=fi"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:wi+=fi"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:WiFi"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"wi fi\""), "*[count(//doc)=1]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">'I.B.M' A's,B's,C's</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:\"'I.B.M.'\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:I.B.M"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:IBM"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:I--B--M"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"I B M\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:IBM's"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"IBM'sx\""), "*[count(//doc)=0]");
// this one fails since IBM and ABC are separated by two tokens
// id:42 AND subword:IBM's-ABC's %*[count(//doc)=1]
- assertQ(req("id:42 AND subword:\"IBM's-ABC's\"~2")
- ,"*[count(//doc)=1]"
- );
+ assertQ(req("id:42 AND subword:\"IBM's-ABC's\"~2"), "*[count(//doc)=1]");
- assertQ(req("id:42 AND subword:\"A's B's-C's\"")
- ,"*[count(//doc)=1]"
- );
+ assertQ(req("id:42 AND subword:\"A's B's-C's\""), "*[count(//doc)=1]");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Sony KDF-E50A10</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">Sony KDF-E50A10</field></doc></add>");
assertU("<commit/>");
// check for exact match:
@@ -1013,239 +748,163 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
// Sony KDF E 50 A 10 (and how it's queried)
- assertQ(req("id:42 AND subword:\"Sony KDF-E50A10\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:10")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:Sony")
- ,"*[count(//doc)=1]"
- );
+ assertQ(req("id:42 AND subword:\"Sony KDF-E50A10\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:10"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:Sony"), "*[count(//doc)=1]");
// this one fails without slop since Sony and KDFE have a token inbetween
// id:42 AND subword:SonyKDFE50A10 %*[count(//doc)=1]
- assertQ(req("id:42 AND subword:\"SonyKDFE50A10\"~10")
- ,"*[count(//doc)=1]"
- );
-
- assertQ(req("id:42 AND subword:\"Sony KDF E-50-A-10\"")
- ,"*[count(//doc)=1]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">http://www.yahoo.com</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:yahoo")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:www.yahoo.com")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:http\\://www.yahoo.com")
- ,"*[count(//doc)=1]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">--Q 1-- W2 E-3 Ok xY 4R 5-T *6-Y- 7-8-- 10A-B</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("id:42 AND subword:Q")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:1")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"w 2\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"e 3\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"o k\"")
- ,"*[count(//doc)=0]"
- );
- assertQ(req("id:42 AND subword:\"ok\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"x y\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"xy\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"4 r\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"5 t\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"5 t\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"6 y\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"7 8\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"78\"")
- ,"*[count(//doc)=1]"
- );
- assertQ(req("id:42 AND subword:\"10 A+B\"")
- ,"*[count(//doc)=1]"
- );
-
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">FooBarBaz</field></doc></add>");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">FooBar10</field></doc></add>");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">10FooBar</field></doc></add>");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">BAZ</field></doc></add>");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">10</field></doc></add>");
- assertU("<add><doc><field name=\"id\">42</field><field name=\"subword\">Mark, I found what's the problem! It turns to be from the latest schema. I found tons of exceptions in the resin.stdout that prevented the builder from performing. It's all coming from the WordDelimiterFilter which was just added to the latest schema: [2005-08-29 15:11:38.375] java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 673804 [2005-08-29 15:11:38.375] at java.util.ArrayList.RangeCheck(ArrayList.java: [...]
-
-
- //
+ assertQ(req("id:42 AND subword:\"SonyKDFE50A10\"~10"), "*[count(//doc)=1]");
+
+ assertQ(req("id:42 AND subword:\"Sony KDF E-50-A-10\""), "*[count(//doc)=1]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">http://www.yahoo.com</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:yahoo"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:www.yahoo.com"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:http\\://www.yahoo.com"), "*[count(//doc)=1]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">--Q 1-- W2 E-3 Ok xY 4R 5-T *6-Y- 7-8-- 10A-B</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("id:42 AND subword:Q"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:1"), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"w 2\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"e 3\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"o k\""), "*[count(//doc)=0]");
+ assertQ(req("id:42 AND subword:\"ok\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"x y\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"xy\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"4 r\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"5 t\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"5 t\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"6 y\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"7 8\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"78\""), "*[count(//doc)=1]");
+ assertQ(req("id:42 AND subword:\"10 A+B\""), "*[count(//doc)=1]");
+
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">FooBarBaz</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">FooBar10</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">10FooBar</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">BAZ</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">10</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">42</field><field name=\"subword\">Mark, I found what's the problem! It turns to be from the latest schema. I found tons of exceptions in the resin.stdout that prevented the builder from performing. It's all coming from the WordDelimiterFilter which was just added to the latest schema: [2005-08-29 15:11:38.375] java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 673804 [2005-08-29 15:11:38.375] at java.util.ArrayList.RangeCheck(ArrayList.java:547) [...]
+
+ //
assertU("<delete fromPending=\"true\" fromCommitted=\"true\"><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"fname_s\">Yonik</field><field name=\"here_b\">true</field><field name=\"iq_l\">10000000000</field><field name=\"description_t\">software engineer</field><field name=\"ego_d\">1e100</field><field name=\"pi_f\">3.1415962</field><field name=\"when_dt\">2005-03-18T01:14:34Z</field><field name=\"arr_f\">1.414213562</field><field name=\"arr_f\">.999</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"fname_s\">Yonik</field><field name=\"here_b\">true</field><field name=\"iq_l\">10000000000</field><field name=\"description_t\">software engineer</field><field name=\"ego_d\">1e100</field><field name=\"pi_f\">3.1415962</field><field name=\"when_dt\">2005-03-18T01:14:34Z</field><field name=\"arr_f\">1.414213562</field><field name=\"arr_f\">.999</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- );
+ assertQ(req("id:44"));
args = new HashMap<>();
- args.put("fl","fname_s,arr_f ");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//str[.='Yonik'] "
- ,"//float[.='1.4142135']"
- );
+ args.put("fl", "fname_s,arr_f ");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//str[.='Yonik'] ", "//float[.='1.4142135']");
args = new HashMap<>();
- args.put("fl","fname_s,score");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//str[.='Yonik']"
- ,"//float[@name='score' and . > 0]"
- );
+ args.put("fl", "fname_s,score");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//str[.='Yonik']", "//float[@name='score' and . > 0]");
// test addition of score field
args = new HashMap<>();
- args.put("fl","score,* ");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//str[.='Yonik'] "
- ,"//float[.='1.4142135'] "
- ,"//float[@name='score'] "
- ,"*[count(//doc/*)>=13]"
- );
+ args.put("fl", "score,* ");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(
+ req,
+ "//str[.='Yonik'] ",
+ "//float[.='1.4142135'] ",
+ "//float[@name='score'] ",
+ "*[count(//doc/*)>=13]");
args = new HashMap<>();
- args.put("fl","*,score ");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//str[.='Yonik'] "
- ,"//float[.='1.4142135'] "
- ,"//float[@name='score'] "
- ,"*[count(//doc/*)>=13]"
- );
+ args.put("fl", "*,score ");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(
+ req,
+ "//str[.='Yonik'] ",
+ "//float[.='1.4142135'] ",
+ "//float[@name='score'] ",
+ "*[count(//doc/*)>=13]");
args = new HashMap<>();
- args.put("fl","* ");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//str[.='Yonik'] "
- ,"//float[.='1.4142135'] "
- ,"*[count(//doc/*)>=12]"
- );
+ args.put("fl", "* ");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//str[.='Yonik'] ", "//float[.='1.4142135'] ", "*[count(//doc/*)>=12]");
// test maxScore
args = new HashMap<>();
- args.put("fl","score ");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//result[@maxScore>0]"
- );
+ args.put("fl", "score ");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//result[@maxScore>0]");
args = new HashMap<>();
- args.put("fl","score ");
- args.put("sort","id desc");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//result[@maxScore>0]"
- );
+ args.put("fl", "score ");
+ args.put("sort", "id desc");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//result[@maxScore>0]");
args = new HashMap<>();
- args.put("fl","score ");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//@maxScore = //doc/float[@name='score']"
- );
+ args.put("fl", "score ");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//@maxScore = //doc/float[@name='score']");
args = new HashMap<>();
- args.put("fl","score ");
- args.put("sort","id desc");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 10, args);
- assertQ(req
- ,"//@maxScore = //doc/float[@name='score']"
- );
+ args.put("fl", "score ");
+ args.put("sort", "id desc");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 10, args);
+ assertQ(req, "//@maxScore = //doc/float[@name='score']");
args = new HashMap<>();
- args.put("fl","*,score");
- args.put("sort","id desc");
- req = new LocalSolrQueryRequest(h.getCore(), "id:44",
- "/select", 0, 0 , args);
- assertQ(req
- ,"//result[@maxScore>0]"
- );
-
+ args.put("fl", "*,score");
+ args.put("sort", "id desc");
+ req = new LocalSolrQueryRequest(h.getCore(), "id:44", "/select", 0, 0, args);
+ assertQ(req, "//result[@maxScore>0]");
// test schema field attribute inheritance and overriding
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"shouldbestored\">hi</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"shouldbestored\">hi</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//*[@name='shouldbestored']"
- );
- assertQ(req("+id:44 +shouldbestored:hi")
- ,"//*[@numFound='1']"
- );
+ assertQ(req("id:44"), "//*[@name='shouldbestored']");
+ assertQ(req("+id:44 +shouldbestored:hi"), "//*[@numFound='1']");
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"shouldbeunstored\">hi</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"shouldbeunstored\">hi</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"not(//*[@name='shouldbeunstored'])"
- );
- assertQ(req("+id:44 +shouldbeunstored:hi")
- ,"//*[@numFound='1']"
- );
+ assertQ(req("id:44"), "not(//*[@name='shouldbeunstored'])");
+ assertQ(req("+id:44 +shouldbeunstored:hi"), "//*[@numFound='1']");
assertU("<delete><id>44</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"shouldbeunindexed\">hi</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"shouldbeunindexed\">hi</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:44")
- ,"//*[@name='shouldbeunindexed']"
- );
+ assertQ(req("id:44"), "//*[@name='shouldbeunindexed']");
// this should result in an error... how to check for that?
// +id:44 +shouldbeunindexed:hi %//*[@numFound="0"]
-
// test spaces between XML elements because that can introduce extra XML events that
// can mess up parsing (and it has in the past)
assertU("<delete> <id>44</id> </delete>");
- assertU("<add> <doc> <field name=\"id\">44</field> <field name=\"shouldbestored\">hi</field> </doc> </add>");
+ assertU(
+ "<add> <doc> <field name=\"id\">44</field> <field name=\"shouldbestored\">hi</field> </doc> </add>");
assertU("<commit />");
// test adding multiple docs per add command
// assertU("<delete><query>id:[0 TO 99]</query></delete>");
- // assertU("<add><doc><field name=\"id\">1</field></doc><doc><field name=\"id\">2</field></doc></add>");
+ // assertU("<add><doc><field name=\"id\">1</field></doc><doc><field
+ // name=\"id\">2</field></doc></add>");
// assertU("<commit/>");
// assertQ(req("id:[0 TO 99]")
// ,"//*[@numFound='2']"
@@ -1259,68 +918,33 @@ public class ConvertedLegacyTest extends SolrTestCaseJ4 {
assertU("<add><doc><field name=\"id\">12</field><field name=\"syn\">c</field></doc></add>");
assertU("<add><doc><field name=\"id\">13</field><field name=\"syn\">foo</field></doc></add>");
assertU("<commit/>");
- assertQ(req("id:10 AND syn:a")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:10 AND syn:aa")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:11 AND syn:b")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:11 AND syn:b1")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:11 AND syn:b2")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:12 AND syn:c")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:12 AND syn:c1")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:12 AND syn:c2")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:13 AND syn:foo")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:13 AND syn:bar")
- ,"//*[@numFound='1']"
- );
- assertQ(req("id:13 AND syn:baz")
- ,"//*[@numFound='1']"
- );
-
+ assertQ(req("id:10 AND syn:a"), "//*[@numFound='1']");
+ assertQ(req("id:10 AND syn:aa"), "//*[@numFound='1']");
+ assertQ(req("id:11 AND syn:b"), "//*[@numFound='1']");
+ assertQ(req("id:11 AND syn:b1"), "//*[@numFound='1']");
+ assertQ(req("id:11 AND syn:b2"), "//*[@numFound='1']");
+ assertQ(req("id:12 AND syn:c"), "//*[@numFound='1']");
+ assertQ(req("id:12 AND syn:c1"), "//*[@numFound='1']");
+ assertQ(req("id:12 AND syn:c2"), "//*[@numFound='1']");
+ assertQ(req("id:13 AND syn:foo"), "//*[@numFound='1']");
+ assertQ(req("id:13 AND syn:bar"), "//*[@numFound='1']");
+ assertQ(req("id:13 AND syn:baz"), "//*[@numFound='1']");
// test position increment gaps between field values
assertU("<delete><id>44</id></delete>");
assertU("<delete><id>45</id></delete>");
- assertU("<add><doc><field name=\"id\">44</field><field name=\"textgap\">aa bb cc</field><field name=\"textgap\">dd ee ff</field></doc></add>");
- assertU("<add><doc><field name=\"id\">45</field><field name=\"text\">aa bb cc</field><field name=\"text\">dd ee ff</field></doc></add>");
- assertU("<commit/>");
- assertQ(req("+id:44 +textgap:\"aa bb cc\"")
- ,"//*[@numFound='1']"
- );
- assertQ(req("+id:44 +textgap:\"dd ee ff\"")
- ,"//*[@numFound='1']"
- );
- assertQ(req("+id:44 +textgap:\"cc dd\"")
- ,"//*[@numFound='0']"
- );
- assertQ(req("+id:44 +textgap:\"cc dd\"~100")
- ,"//*[@numFound='1']"
- );
- assertQ(req("+id:44 +textgap:\"bb cc dd ee\"~90")
- ,"//*[@numFound='0']"
- );
- assertQ(req("+id:44 +textgap:\"bb cc dd ee\"~100")
- ,"//*[@numFound='1']"
- );
- assertQ(req("+id:45 +text:\"cc dd\"")
- ,"//*[@numFound='1']"
- );
+ assertU(
+ "<add><doc><field name=\"id\">44</field><field name=\"textgap\">aa bb cc</field><field name=\"textgap\">dd ee ff</field></doc></add>");
+ assertU(
+ "<add><doc><field name=\"id\">45</field><field name=\"text\">aa bb cc</field><field name=\"text\">dd ee ff</field></doc></add>");
+ assertU("<commit/>");
+ assertQ(req("+id:44 +textgap:\"aa bb cc\""), "//*[@numFound='1']");
+ assertQ(req("+id:44 +textgap:\"dd ee ff\""), "//*[@numFound='1']");
+ assertQ(req("+id:44 +textgap:\"cc dd\""), "//*[@numFound='0']");
+ assertQ(req("+id:44 +textgap:\"cc dd\"~100"), "//*[@numFound='1']");
+ assertQ(req("+id:44 +textgap:\"bb cc dd ee\"~90"), "//*[@numFound='0']");
+ assertQ(req("+id:44 +textgap:\"bb cc dd ee\"~100"), "//*[@numFound='1']");
+ assertQ(req("+id:45 +text:\"cc dd\""), "//*[@numFound='1']");
}
}
diff --git a/solr/core/src/test/org/apache/solr/CursorPagingTest.java b/solr/core/src/test/org/apache/solr/CursorPagingTest.java
index 378574c..e3b1b28 100644
--- a/solr/core/src/test/org/apache/solr/CursorPagingTest.java
+++ b/solr/core/src/test/org/apache/solr/CursorPagingTest.java
@@ -16,6 +16,13 @@
*/
package org.apache.solr;
+import static org.apache.solr.common.params.CommonParams.TIME_ALLOWED;
+import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_NEXT;
+import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_PARAM;
+import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_START;
+import static org.apache.solr.common.params.SolrParams.wrapDefaults;
+import static org.apache.solr.common.util.Utils.fromJSONString;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -28,7 +35,7 @@ import java.util.UUID;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-
+import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.util.SentinelIntSet;
import org.apache.lucene.util.TestUtil;
import org.apache.lucene.util.mutable.MutableValueInt;
@@ -47,36 +54,28 @@ import org.apache.solr.util.LogLevel;
import org.junit.After;
import org.junit.BeforeClass;
-import org.apache.commons.lang3.StringUtils;
-
-import static org.apache.solr.common.params.SolrParams.wrapDefaults;
-import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_NEXT;
-import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_PARAM;
-import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_START;
-import static org.apache.solr.common.params.CommonParams.TIME_ALLOWED;
-import static org.apache.solr.common.util.Utils.fromJSONString;
-
-/**
- * Tests of deep paging using {@link CursorMark} and {@link CursorMarkParams#CURSOR_MARK_PARAM}.
- */
+/** Tests of deep paging using {@link CursorMark} and {@link CursorMarkParams#CURSOR_MARK_PARAM}. */
public class CursorPagingTest extends SolrTestCaseJ4 {
/** solrconfig.xml file name, shared with other cursor related tests */
-
- public final static String TEST_SOLRCONFIG_NAME = "solrconfig-deeppaging.xml";
+ public static final String TEST_SOLRCONFIG_NAME = "solrconfig-deeppaging.xml";
/** schema.xml file name, shared with other cursor related tests */
- public final static String TEST_SCHEMAXML_NAME = "schema-sorts.xml";
+ public static final String TEST_SCHEMAXML_NAME = "schema-sorts.xml";
/** values from enumConfig.xml */
- public static final String[] SEVERITY_ENUM_VALUES =
- { "Not Available", "Low", "Medium", "High", "Critical" };
+ public static final String[] SEVERITY_ENUM_VALUES = {
+ "Not Available", "Low", "Medium", "High", "Critical"
+ };
@BeforeClass
public static void beforeTests() throws Exception {
// we need DVs on point fields to compute stats & facets
- if (Boolean.getBoolean(NUMERIC_POINTS_SYSPROP)) System.setProperty(NUMERIC_DOCVALUES_SYSPROP,"true");
- System.setProperty("solr.test.useFilterForSortedQuery", Boolean.toString(random().nextBoolean()));
+ if (Boolean.getBoolean(NUMERIC_POINTS_SYSPROP))
+ System.setProperty(NUMERIC_DOCVALUES_SYSPROP, "true");
+ System.setProperty(
+ "solr.test.useFilterForSortedQuery", Boolean.toString(random().nextBoolean()));
initCore(TEST_SOLRCONFIG_NAME, TEST_SCHEMAXML_NAME);
}
+
@After
public void cleanup() throws Exception {
assertU(delQ("*:*"));
@@ -95,80 +94,85 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
assertU(commit());
// empty, blank, or bogus cursor
- for (String c : new String[] { "", " ", "all the docs please!"}) {
- assertFail(params("q", "*:*",
- "sort", "id desc",
- CURSOR_MARK_PARAM, c),
- ErrorCode.BAD_REQUEST, "Unable to parse");
+ for (String c : new String[] {"", " ", "all the docs please!"}) {
+ assertFail(
+ params("q", "*:*", "sort", "id desc", CURSOR_MARK_PARAM, c),
+ ErrorCode.BAD_REQUEST,
+ "Unable to parse");
}
// no id in sort
- assertFail(params("q", "*:*",
- "sort", "score desc",
- CURSOR_MARK_PARAM, CURSOR_MARK_START),
- ErrorCode.BAD_REQUEST, "uniqueKey field");
+ assertFail(
+ params("q", "*:*", "sort", "score desc", CURSOR_MARK_PARAM, CURSOR_MARK_START),
+ ErrorCode.BAD_REQUEST,
+ "uniqueKey field");
// _docid_
- assertFail(params("q", "*:*",
- "sort", "_docid_ asc, id desc",
- CURSOR_MARK_PARAM, CURSOR_MARK_START),
- ErrorCode.BAD_REQUEST, "_docid_");
+ assertFail(
+ params("q", "*:*", "sort", "_docid_ asc, id desc", CURSOR_MARK_PARAM, CURSOR_MARK_START),
+ ErrorCode.BAD_REQUEST,
+ "_docid_");
// using cursor w/ grouping
- assertFail(params("q", "*:*",
- "sort", "id desc",
- GroupParams.GROUP, "true",
- GroupParams.GROUP_FIELD, "str",
- CURSOR_MARK_PARAM, CURSOR_MARK_START),
- ErrorCode.BAD_REQUEST, "Grouping");
-
- // if a user specifies a 'bogus' cursorMark param, this should error *only* if some other component
- // cares about (and parses) a SortSpec in it's prepare() method.
- // (the existence of a 'sort' param shouldn't make a diff ... unless it makes a diff to a component being used,
+ assertFail(
+ params(
+ "q",
+ "*:*",
+ "sort",
+ "id desc",
+ GroupParams.GROUP,
+ "true",
+ GroupParams.GROUP_FIELD,
+ "str",
+ CURSOR_MARK_PARAM,
+ CURSOR_MARK_START),
+ ErrorCode.BAD_REQUEST,
+ "Grouping");
+
+ // if a user specifies a 'bogus' cursorMark param, this should error *only* if some other
+ // component cares about (and parses) a SortSpec in it's prepare() method. (the existence of a
+ // 'sort' param shouldn't make a diff ... unless it makes a diff to a component being used,
// which it doesn't for RTG)
assertU(adoc("id", "yyy", "str", "y", "float", "3", "int", "-3"));
if (random().nextBoolean()) {
assertU(commit());
}
- for (SolrParams p : Arrays.asList(params(),
- params(CURSOR_MARK_PARAM, "gibberish"),
- params(CURSOR_MARK_PARAM, "gibberish",
- "sort", "id asc"))) {
- assertJQ(req(p,
- "qt","/get",
- "fl", "id",
- "id","yyy")
- , "=={'doc':{'id':'yyy'}}");
- assertJQ(req(p,
- "qt","/get",
- "fl", "id",
- "id","xxx") // doesn't exist in our collection
- , "=={'doc':null}");
+ for (SolrParams p :
+ Arrays.asList(
+ params(),
+ params(CURSOR_MARK_PARAM, "gibberish"),
+ params(CURSOR_MARK_PARAM, "gibberish", "sort", "id asc"))) {
+ assertJQ(req(p, "qt", "/get", "fl", "id", "id", "yyy"), "=={'doc':{'id':'yyy'}}");
+ assertJQ(
+ req(p, "qt", "/get", "fl", "id", "id", "xxx") // doesn't exist in our collection
+ ,
+ "=={'doc':null}");
}
}
-
/** simple static test of some carefully crafted docs */
public void testSimple() throws Exception {
String cursorMark;
SolrParams params = null;
-
+
final String intsort = "int" + (random().nextBoolean() ? "" : "_dv");
final String intmissingsort = intsort;
// trivial base case: ensure cursorMark against an empty index doesn't blow up
cursorMark = CURSOR_MARK_START;
- params = params("q", "*:*",
- "rows","4",
- "fl", "id",
- "sort", "id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==0"
- ,"/response/start==0"
- ,"/response/docs==[]"
- );
+ params =
+ params(
+ "q", "*:*",
+ "rows", "4",
+ "fl", "id",
+ "sort", "id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==0",
+ "/response/start==0",
+ "/response/docs==[]");
assertEquals(CURSOR_MARK_START, cursorMark);
-
// don't add in order of any field to ensure we aren't inadvertently
// counting on internal docid ordering
assertU(adoc("id", "9", "str", "c", "float", "-3.2", "int", "42"));
@@ -185,289 +189,357 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
// base case: ensure cursorMark that matches no docs doesn't blow up
cursorMark = CURSOR_MARK_START;
- params = params("q", "id:9999999",
- "rows","4",
- "fl", "id",
- "sort", "id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==0"
- ,"/response/start==0"
- ,"/response/docs==[]"
- );
+ params =
+ params(
+ "q", "id:9999999",
+ "rows", "4",
+ "fl", "id",
+ "sort", "id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==0",
+ "/response/start==0",
+ "/response/docs==[]");
assertEquals(CURSOR_MARK_START, cursorMark);
// edge case: ensure rows=0 doesn't blow up and gives back same cursor for next
cursorMark = CURSOR_MARK_START;
- params = params("q", "*:*",
- "rows","0",
- "fl", "id",
- "sort", "id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[]"
- );
+ params =
+ params(
+ "q", "*:*",
+ "rows", "0",
+ "fl", "id",
+ "sort", "id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[]");
assertEquals(CURSOR_MARK_START, cursorMark);
// simple id sort w/some faceting
cursorMark = CURSOR_MARK_START;
- params = params("q", "-int:6",
- "rows","4",
- "fl", "id",
- "sort", "id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==9"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'9'},{'id':'8'},{'id':'7'},{'id':'6'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==9"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'5'},{'id':'3'},{'id':'2'},{'id':'1'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==9"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'0'}]"
- );
+ params =
+ params(
+ "q", "-int:6",
+ "rows", "4",
+ "fl", "id",
+ "sort", "id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==9",
+ "/response/start==0",
+ "/response/docs==[{'id':'9'},{'id':'8'},{'id':'7'},{'id':'6'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==9",
+ "/response/start==0",
+ "/response/docs==[{'id':'5'},{'id':'3'},{'id':'2'},{'id':'1'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==9",
+ "/response/start==0",
+ "/response/docs==[{'id':'0'}]");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==9"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==9",
+ "/response/start==0",
+ "/response/docs==[]"));
// simple score sort w/some faceting
cursorMark = CURSOR_MARK_START;
- params = params("q", "float:[0 TO *] int:7 id:6",
- "rows","4",
- "fl", "id",
- "facet", "true",
- "facet.field", "str",
- "json.nl", "map",
- "sort", "score desc, id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==7"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'6'},{'id':'1'},{'id':'8'},{'id':'5'}]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':3,'c':0}"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==7"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'4'},{'id':'3'},{'id':'0'}]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':3,'c':0}"
- );
+ params =
+ params(
+ "q", "float:[0 TO *] int:7 id:6",
+ "rows", "4",
+ "fl", "id",
+ "facet", "true",
+ "facet.field", "str",
+ "json.nl", "map",
+ "sort", "score desc, id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==7",
+ "/response/start==0",
+ "/response/docs==[{'id':'6'},{'id':'1'},{'id':'8'},{'id':'5'}]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':3,'c':0}");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==7",
+ "/response/start==0",
+ "/response/docs==[{'id':'4'},{'id':'3'},{'id':'0'}]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':3,'c':0}");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==7"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':3,'c':0}"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==7",
+ "/response/start==0",
+ "/response/docs==[]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':3,'c':0}"));
// int sort with dups, id tie breaker ... and some faceting
cursorMark = CURSOR_MARK_START;
- params = params("q", "-int:2001 -int:4055",
- "rows","3",
- "fl", "id",
- "facet", "true",
- "facet.field", "str",
- "json.nl", "map",
- "sort", intsort + " asc, id asc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'7'},{'id':'0'},{'id':'3'}]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'4'},{'id':'1'},{'id':'6'}]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'9'},{'id':'2'}]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}"
- );
+ params =
+ params(
+ "q", "-int:2001 -int:4055",
+ "rows", "3",
+ "fl", "id",
+ "facet", "true",
+ "facet.field", "str",
+ "json.nl", "map",
+ "sort", intsort + " asc, id asc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'7'},{'id':'0'},{'id':'3'}]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'4'},{'id':'1'},{'id':'6'}]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'9'},{'id':'2'}]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ,"/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[]",
+ "/facet_counts/facet_fields/str=={'a':4,'b':1,'c':3}"));
// int missing first sort with dups, id tie breaker
cursorMark = CURSOR_MARK_START;
- params = params("q", "-int:2001 -int:4055",
- "rows","3",
- "fl", "id",
- "json.nl", "map",
- "sort", intmissingsort + "_first asc, id asc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'3'},{'id':'7'},{'id':'0'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'4'},{'id':'1'},{'id':'6'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'9'},{'id':'2'}]"
- );
+ params =
+ params(
+ "q", "-int:2001 -int:4055",
+ "rows", "3",
+ "fl", "id",
+ "json.nl", "map",
+ "sort", intmissingsort + "_first asc, id asc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'3'},{'id':'7'},{'id':'0'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'4'},{'id':'1'},{'id':'6'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'9'},{'id':'2'}]");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[]"));
// int missing last sort with dups, id tie breaker
cursorMark = CURSOR_MARK_START;
- params = params("q", "-int:2001 -int:4055",
- "rows","3",
- "fl", "id",
- "json.nl", "map",
- "sort", intmissingsort + "_last asc, id asc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'7'},{'id':'0'},{'id':'4'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'1'},{'id':'6'},{'id':'9'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'2'},{'id':'3'}]"
- );
+ params =
+ params(
+ "q", "-int:2001 -int:4055",
+ "rows", "3",
+ "fl", "id",
+ "json.nl", "map",
+ "sort", intmissingsort + "_last asc, id asc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'7'},{'id':'0'},{'id':'4'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'1'},{'id':'6'},{'id':'9'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'2'},{'id':'3'}]");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[]"));
// string sort with dups, id tie breaker
cursorMark = CURSOR_MARK_START;
- params = params("q", "*:*",
- "rows","6",
- "fl", "id",
- "sort", "str asc, id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'6'},{'id':'4'},{'id':'3'},{'id':'1'},{'id':'8'},{'id':'5'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'0'},{'id':'9'},{'id':'7'},{'id':'2'}]"
- );
+ params =
+ params(
+ "q", "*:*",
+ "rows", "6",
+ "fl", "id",
+ "sort", "str asc, id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'6'},{'id':'4'},{'id':'3'},{'id':'1'},{'id':'8'},{'id':'5'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'0'},{'id':'9'},{'id':'7'},{'id':'2'}]");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[]"));
// tri-level sort with more dups of primary then fit on a page
cursorMark = CURSOR_MARK_START;
- params = params("q", "*:*",
- "rows","2",
- "fl", "id",
- "sort", "float asc, "+intsort+" desc, id desc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'2'},{'id':'9'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'7'},{'id':'4'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'3'},{'id':'8'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'5'},{'id':'6'}]"
- );
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'1'},{'id':'0'}]"
- );
+ params =
+ params(
+ "q", "*:*",
+ "rows", "2",
+ "fl", "id",
+ "sort", "float asc, " + intsort + " desc, id desc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'2'},{'id':'9'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'7'},{'id':'4'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'3'},{'id':'8'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'5'},{'id':'6'}]");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'1'},{'id':'0'}]");
// we've exactly exhausted all the results, but solr had no way of know that
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[]"));
// trivial base case: rows bigger then number of matches
cursorMark = CURSOR_MARK_START;
- params = params("q", "id:3 id:7",
- "rows","111",
- "fl", "id",
- "sort", intsort + " asc, id asc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==2"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'7'},{'id':'3'}]"
- );
+ params =
+ params(
+ "q", "id:3 id:7",
+ "rows", "111",
+ "fl", "id",
+ "sort", intsort + " asc, id asc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==2",
+ "/response/start==0",
+ "/response/docs==[{'id':'7'},{'id':'3'}]");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==2"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==2",
+ "/response/start==0",
+ "/response/docs==[]"));
// sanity check our full walk method
SentinelIntSet ids;
- ids = assertFullWalkNoDups(10, params("q", "*:*",
- "rows", "4",
- "sort", "id desc"));
+ ids =
+ assertFullWalkNoDups(
+ 10,
+ params(
+ "q", "*:*",
+ "rows", "4",
+ "sort", "id desc"));
assertEquals(10, ids.size());
- ids = assertFullWalkNoDups(9, params("q", "*:*",
- "rows", "1",
- "fq", "-id:4",
- "sort", "id asc"));
+ ids =
+ assertFullWalkNoDups(
+ 9,
+ params(
+ "q", "*:*",
+ "rows", "1",
+ "fq", "-id:4",
+ "sort", "id asc"));
assertEquals(9, ids.size());
assertFalse("matched on id:4 unexpectedly", ids.exists(4));
- ids = assertFullWalkNoDups(9, params("q", "*:*",
- "rows", "3",
- "fq", "-id:6",
- "sort", "float desc, id asc, "+intsort+" asc"));
+ ids =
+ assertFullWalkNoDups(
+ 9,
+ params(
+ "q", "*:*",
+ "rows", "3",
+ "fq", "-id:6",
+ "sort", "float desc, id asc, " + intsort + " asc"));
assertEquals(9, ids.size());
assertFalse("matched on id:6 unexpectedly", ids.exists(6));
- ids = assertFullWalkNoDups(9, params("q", "float:[0 TO *] int:7 id:6",
- "rows", "3",
- "sort", "score desc, id desc"));
+ ids =
+ assertFullWalkNoDups(
+ 9,
+ params(
+ "q", "float:[0 TO *] int:7 id:6",
+ "rows", "3",
+ "sort", "score desc, id desc"));
assertEquals(7, ids.size());
assertFalse("matched on id:9 unexpectedly", ids.exists(9));
assertFalse("matched on id:7 unexpectedly", ids.exists(7));
@@ -475,71 +547,81 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
// strategically delete/add some docs in the middle of walking the cursor
cursorMark = CURSOR_MARK_START;
- params = params("q", "*:*",
- "rows","2",
- "fl", "id",
- "sort", "str asc, id asc");
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==10"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'1'},{'id':'3'}]"
- );
+ params =
+ params(
+ "q", "*:*",
+ "rows", "2",
+ "fl", "id",
+ "sort", "str asc, id asc");
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==10",
+ "/response/start==0",
+ "/response/docs==[{'id':'1'},{'id':'3'}]");
// delete the last guy we got
- assertU(delI("3"));
+ assertU(delI("3"));
assertU(commit());
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==9"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'4'},{'id':'6'}]"
- );
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==9",
+ "/response/start==0",
+ "/response/docs==[{'id':'4'},{'id':'6'}]");
// delete the next guy we expect
- assertU(delI("0"));
+ assertU(delI("0"));
assertU(commit());
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'5'},{'id':'8'}]"
- );
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'5'},{'id':'8'}]");
// update a doc we've already seen so it repeats
assertU(adoc("id", "5", "str", "c"));
assertU(commit());
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'2'},{'id':'5'}]"
- );
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'2'},{'id':'5'}]");
// update the next doc we expect so it's now in the past
assertU(adoc("id", "7", "str", "a"));
assertU(commit());
- cursorMark = assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[{'id':'9'}]"
- );
+ cursorMark =
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[{'id':'9'}]");
// no more, so no change to cursorMark, and no new docs
- assertEquals(cursorMark,
- assertCursor(req(params, CURSOR_MARK_PARAM, cursorMark)
- ,"/response/numFound==8"
- ,"/response/start==0"
- ,"/response/docs==[]"
- ));
+ assertEquals(
+ cursorMark,
+ assertCursor(
+ req(params, CURSOR_MARK_PARAM, cursorMark),
+ "/response/numFound==8",
+ "/response/start==0",
+ "/response/docs==[]"));
}
/**
- * test that timeAllowed parameter can be used with cursors
- * uses DelayingSearchComponent in solrconfig-deeppaging.xml
+ * test that timeAllowed parameter can be used with cursors uses DelayingSearchComponent in
+ * solrconfig-deeppaging.xml
*/
- @LogLevel("org.apache.solr.search.SolrIndexSearcher=ERROR;org.apache.solr.handler.component.SearchHandler=ERROR")
+ @LogLevel(
+ "org.apache.solr.search.SolrIndexSearcher=ERROR;org.apache.solr.handler.component.SearchHandler=ERROR")
public void testTimeAllowed() throws Exception {
String wontExceedTimeout = "10000";
int numDocs = 1000;
- List<String> ids = IntStream.range(0, 1000).mapToObj(String::valueOf).collect(Collectors.toList());
+ List<String> ids =
+ IntStream.range(0, 1000).mapToObj(String::valueOf).collect(Collectors.toList());
// Shuffle to test ordering
Collections.shuffle(ids, random());
for (String id : ids) {
assertU(adoc("id", id, "name", "a" + id));
if (random().nextInt(numDocs) == 0) {
- assertU(commit()); // sometimes make multiple segments
+ assertU(commit()); // sometimes make multiple segments
}
}
assertU(commit());
@@ -548,12 +630,20 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
String cursorMark, nextCursorMark = CURSOR_MARK_START;
- SolrParams params = params("q", "name:a*",
- "fl", "id",
- "sort", "id asc",
- "rows", "50",
- "qt", "/delayed",
- "sleep", "10");
+ SolrParams params =
+ params(
+ "q",
+ "name:a*",
+ "fl",
+ "id",
+ "sort",
+ "id asc",
+ "rows",
+ "50",
+ "qt",
+ "/delayed",
+ "sleep",
+ "10");
List<String> foundDocIds = new ArrayList<>();
String[] timeAllowedVariants = {"1", "50", wontExceedTimeout};
@@ -563,7 +653,8 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
for (String timeAllowed : timeAllowedVariants) {
// execute the query
- String json = assertJQ(req(params, CURSOR_MARK_PARAM, cursorMark, TIME_ALLOWED, timeAllowed));
+ String json =
+ assertJQ(req(params, CURSOR_MARK_PARAM, cursorMark, TIME_ALLOWED, timeAllowed));
Map<?, ?> response = (Map<?, ?>) fromJSONString(json);
Map<?, ?> responseHeader = (Map<?, ?>) response.get("responseHeader");
@@ -594,15 +685,18 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
// Note: it is not guaranteed that all docs will be found, because a query may time out
// before reaching all segments, this causes documents in the skipped segments to be skipped
// in the overall result set as the cursor pages through.
- assertEquals("Should have found last doc id eventually", ids.get(ids.size() -1), foundDocIds.get(foundDocIds.size() -1));
- assertEquals("Documents arrived in sorted order within and between pages", sortedFoundDocIds, foundDocIds);
+ assertEquals(
+ "Should have found last doc id eventually",
+ ids.get(ids.size() - 1),
+ foundDocIds.get(foundDocIds.size() - 1));
+ assertEquals(
+ "Documents arrived in sorted order within and between pages",
+ sortedFoundDocIds,
+ foundDocIds);
assertTrue("Should have experienced at least one partialResult", partialCount > 0);
}
-
- /**
- * test that our assumptions about how caches are affected hold true
- */
+ /** test that our assumptions about how caches are affected hold true */
public void testCacheImpacts() throws Exception {
// cursor queries can't live in the queryResultCache, but independent filters
// should still be cached & reused
@@ -624,46 +718,61 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
final Collection<String> allFieldNames = getAllSortFieldNames();
final MetricsMap filterCacheStats =
- (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.filterCache")).getGauge();
+ (MetricsMap)
+ ((SolrMetricManager.GaugeWrapper)
+ h.getCore()
+ .getCoreMetricManager()
+ .getRegistry()
+ .getMetrics()
+ .get("CACHE.searcher.filterCache"))
+ .getGauge();
assertNotNull(filterCacheStats);
final MetricsMap queryCacheStats =
- (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
+ (MetricsMap)
+ ((SolrMetricManager.GaugeWrapper)
+ h.getCore()
+ .getCoreMetricManager()
+ .getRegistry()
+ .getMetrics()
+ .get("CACHE.searcher.queryResultCache"))
+ .getGauge();
assertNotNull(queryCacheStats);
final long preQcIn = (Long) queryCacheStats.getValue().get("inserts");
final long preFcIn = (Long) filterCacheStats.getValue().get("inserts");
final long preFcHits = (Long) filterCacheStats.getValue().get("hits");
- SentinelIntSet ids = assertFullWalkNoDups
- (10, params("q", "*:*",
- "rows",""+ TestUtil.nextInt(random(), 1, 11),
- "fq", "-id:[1 TO 2]",
- "fq", "-id:[6 TO 7]",
- "fl", "id",
- "sort", buildRandomSort(allFieldNames)));
-
+ SentinelIntSet ids =
+ assertFullWalkNoDups(
+ 10,
+ params(
+ "q", "*:*",
+ "rows", "" + TestUtil.nextInt(random(), 1, 11),
+ "fq", "-id:[1 TO 2]",
+ "fq", "-id:[6 TO 7]",
+ "fl", "id",
+ "sort", buildRandomSort(allFieldNames)));
+
assertEquals(6, ids.size());
final long postQcIn = (Long) queryCacheStats.getValue().get("inserts");
final long postFcIn = (Long) filterCacheStats.getValue().get("inserts");
final long postFcHits = (Long) filterCacheStats.getValue().get("hits");
-
+
assertEquals("query cache inserts changed", preQcIn, postQcIn);
// NOTE: use of pure negative filters clauses "*:* to be tracked in filterCache
- assertEquals("filter cache did not grow correctly", 3, postFcIn-preFcIn);
- assertTrue("filter cache did not have any new cache hits", 0 < postFcHits-preFcHits);
-
+ assertEquals("filter cache did not grow correctly", 3, postFcIn - preFcIn);
+ assertTrue("filter cache did not have any new cache hits", 0 < postFcHits - preFcHits);
}
- /** randomized testing of a non-trivial number of docs using assertFullWalkNoDups
- */
+ /** randomized testing of a non-trivial number of docs using assertFullWalkNoDups */
public void testRandomSortsOnLargeIndex() throws Exception {
final Collection<String> allFieldNames = getAllSortFieldNames();
final int initialDocs = TestUtil.nextInt(random(), 100, 200);
final int totalDocs = atLeast(500);
- // start with a smallish number of documents, and test that we can do a full walk using a
+ // start with a smallish number of documents, and test that we can do a full walk using a
// sort on *every* field in the schema...
for (int i = 1; i <= initialDocs; i++) {
@@ -676,20 +785,22 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
for (String order : new String[] {" asc", " desc"}) {
String sort = f + order + ("id".equals(f) ? "" : ", id" + order);
String rows = "" + TestUtil.nextInt(random(), 13, 50);
- final SolrParams main = params("q", "*:*",
- "fl","id",
- "rows",rows,
- "sort",sort);
+ final SolrParams main = params("q", "*:*", "fl", "id", "rows", rows, "sort", sort);
final SentinelIntSet ids = assertFullWalkNoDups(totalDocs, main);
assertEquals(initialDocs, ids.size());
- // same query, now with QEC ... verify we get all the same docs, but the (expected) elevated docs are first...
- final SentinelIntSet elevated = assertFullWalkNoDupsElevated(wrapDefaults(params("qt", "/elevate",
- "fl","id,[elevated]",
- "forceElevation","true",
- "elevateIds", "50,20,80"),
- main),
- ids);
+ // same query, now with QEC ... verify we get all the same docs, but the (expected) elevated
+ // docs are first...
+ final SentinelIntSet elevated =
+ assertFullWalkNoDupsElevated(
+ wrapDefaults(
+ params(
+ "qt", "/elevate",
+ "fl", "id,[elevated]",
+ "forceElevation", "true",
+ "elevateIds", "50,20,80"),
+ main),
+ ids);
assertTrue(elevated.exists(50));
assertTrue(elevated.exists(20));
assertTrue(elevated.exists(80));
@@ -698,7 +809,7 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
// now add a lot more docs, and test a handful of randomized sorts
- for (int i = initialDocs+1; i <= totalDocs; i++) {
+ for (int i = initialDocs + 1; i <= totalDocs; i++) {
SolrInputDocument doc = buildRandomDocument(i);
assertU(adoc(doc));
}
@@ -711,59 +822,70 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
final String fl = random().nextBoolean() ? "id" : "id,score";
final boolean matchAll = random().nextBoolean();
final String q = matchAll ? "*:*" : buildRandomQuery();
- final SolrParams main = params("q", q,
- "fl",fl,
- "rows",rows,
- "sort",sort);
+ final SolrParams main =
+ params(
+ "q", q,
+ "fl", fl,
+ "rows", rows,
+ "sort", sort);
final SentinelIntSet ids = assertFullWalkNoDups(totalDocs, main);
if (matchAll) {
assertEquals(totalDocs, ids.size());
}
- // same query, now with QEC ... verify we get all the same docs, but the (expected) elevated docs are first...
+ // same query, now with QEC ... verify we get all the same docs, but the (expected) elevated
+ // docs are first...
// first we have to build a set of ids to elevate, from the set of ids known to match query...
final int[] expectedElevated = pickElevations(TestUtil.nextInt(random(), 3, 33), ids);
- final SentinelIntSet elevated = assertFullWalkNoDupsElevated
- (wrapDefaults(params("qt", "/elevate",
- "fl", fl + ",[elevated]",
- // HACK: work around SOLR-15307... same results should match, just not same order
- "sort", (sort.startsWith("score asc") ? "score desc, " + sort : sort),
- "forceElevation","true",
- "elevateIds", StringUtils.join(expectedElevated,',')),
- main),
- ids);
+ final SentinelIntSet elevated =
+ assertFullWalkNoDupsElevated(
+ wrapDefaults(
+ params(
+ "qt",
+ "/elevate",
+ "fl",
+ fl + ",[elevated]",
+ // HACK: work around SOLR-15307... same results should match, just not same
+ // order
+ "sort",
+ (sort.startsWith("score asc") ? "score desc, " + sort : sort),
+ "forceElevation",
+ "true",
+ "elevateIds",
+ StringUtils.join(expectedElevated, ',')),
+ main),
+ ids);
for (int expected : expectedElevated) {
- assertTrue(expected + " wasn't elevated even though it should have been",
- elevated.exists(expected));
+ assertTrue(
+ expected + " wasn't elevated even though it should have been",
+ elevated.exists(expected));
}
assertEquals(expectedElevated.length, elevated.size());
}
}
- /** Similar to usually() but we want it to happen just as often regardless
- * of test multiplier and nightly status
+ /**
+ * Similar to usually() but we want it to happen just as often regardless of test multiplier and
+ * nightly status
*/
private static boolean useField() {
return 0 != TestUtil.nextInt(random(), 0, 30);
}
-
+
/**
- * An immutable list of the fields in the schema that can be used for sorting,
- * deterministically random order.
+ * An immutable list of the fields in the schema that can be used for sorting, deterministically
+ * random order.
*/
private List<String> getAllSortFieldNames() {
- return pruneAndDeterministicallySort
- (h.getCore().getLatestSchema().getFields().keySet());
+ return pruneAndDeterministicallySort(h.getCore().getLatestSchema().getFields().keySet());
}
-
/**
- * <p>
- * Given a list of field names in the schema, returns an immutable list in
- * deterministically random order with the following things removed:
- * </p>
+ * Given a list of field names in the schema, returns an immutable list in deterministically
+ * random order with the following things removed:
+ *
* <ul>
- * <li><code>_version_</code> is removed</li>
+ * <li><code>_version_</code> is removed
* </ul>
*/
public static List<String> pruneAndDeterministicallySort(Collection<String> raw) {
@@ -777,119 +899,119 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
Collections.sort(names);
- Collections.shuffle(names,random());
+ Collections.shuffle(names, random());
return Collections.<String>unmodifiableList(names);
}
/**
* Given a set of params, executes a cursor query using {@link CursorMarkParams#CURSOR_MARK_START}
- * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as long
- * as a non-0 number of docs ar returned. This method records the the set of all id's
- * (must be positive ints) encountered and throws an assertion failure if any id is
- * encountered more than once, or if an id is encountered which is not expected,
- * or if an id is <code>[elevated]</code> and comes "after" any ids which were not <code>[elevated]</code>
- *
+ * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as
+ * long as a non-0 number of docs ar returned. This method records the the set of all id's (must
+ * be positive ints) encountered and throws an assertion failure if any id is encountered more
+ * than once, or if an id is encountered which is not expected, or if an id is <code>[elevated]
+ * </code> and comes "after" any ids which were not <code>[elevated]</code>
*
* @returns set of all elevated ids encountered in the walk
* @see #assertFullWalkNoDups(SolrParams,Consumer)
*/
- public SentinelIntSet assertFullWalkNoDupsElevated(final SolrParams params, final SentinelIntSet allExpected)
- throws Exception {
+ public SentinelIntSet assertFullWalkNoDupsElevated(
+ final SolrParams params, final SentinelIntSet allExpected) throws Exception {
final SentinelIntSet ids = new SentinelIntSet(allExpected.size(), -1);
final SentinelIntSet idsElevated = new SentinelIntSet(32, -1);
- assertFullWalkNoDups(params, (doc) -> {
- final int id = Integer.parseInt(doc.get("id").toString());
- final boolean elevated = Boolean.parseBoolean(doc.getOrDefault("[elevated]","false").toString());
- assertTrue(id + " is not expected to match query",
- allExpected.exists(id));
- assertFalse("walk already seen: " + id,
- ids.exists(id));
- if (elevated) {
- assertEquals("id is elevated, but we've already seen non elevated ids: " + id,
- idsElevated.size(), ids.size());
- idsElevated.put(id);
- }
- ids.put(id);
- });
- assertEquals("total number of ids seen did not match expected",
- allExpected.size(), ids.size());
-
+ assertFullWalkNoDups(
+ params,
+ (doc) -> {
+ final int id = Integer.parseInt(doc.get("id").toString());
+ final boolean elevated =
+ Boolean.parseBoolean(doc.getOrDefault("[elevated]", "false").toString());
+ assertTrue(id + " is not expected to match query", allExpected.exists(id));
+ assertFalse("walk already seen: " + id, ids.exists(id));
+ if (elevated) {
+ assertEquals(
+ "id is elevated, but we've already seen non elevated ids: " + id,
+ idsElevated.size(),
+ ids.size());
+ idsElevated.put(id);
+ }
+ ids.put(id);
+ });
+ assertEquals("total number of ids seen did not match expected", allExpected.size(), ids.size());
+
return idsElevated;
}
-
/**
* Given a set of params, executes a cursor query using {@link CursorMarkParams#CURSOR_MARK_START}
- * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as long
- * as a non-0 number of docs ar returned. This method records the the set of all id's
- * (must be positive ints) encountered and throws an assertion failure if any id is
- * encountered more than once, or if the set grows above maxSize
+ * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as
+ * long as a non-0 number of docs ar returned. This method records the the set of all id's (must
+ * be positive ints) encountered and throws an assertion failure if any id is encountered more
+ * than once, or if the set grows above maxSize
*
* @returns set of all ids encountered in the walk
* @see #assertFullWalkNoDups(SolrParams,Consumer)
*/
- public SentinelIntSet assertFullWalkNoDups(int maxSize, SolrParams params)
- throws Exception {
+ public SentinelIntSet assertFullWalkNoDups(int maxSize, SolrParams params) throws Exception {
final SentinelIntSet ids = new SentinelIntSet(maxSize, -1);
- assertFullWalkNoDups(params, (doc) -> {
- int id = Integer.parseInt(doc.get("id").toString());
- assertFalse("walk already seen: " + id, ids.exists(id));
- ids.put(id);
- assertFalse("id set bigger then max allowed ("+maxSize+"): " + ids.size(),
- maxSize < ids.size());
-
- });
+ assertFullWalkNoDups(
+ params,
+ (doc) -> {
+ int id = Integer.parseInt(doc.get("id").toString());
+ assertFalse("walk already seen: " + id, ids.exists(id));
+ ids.put(id);
+ assertFalse(
+ "id set bigger then max allowed (" + maxSize + "): " + ids.size(),
+ maxSize < ids.size());
+ });
return ids;
}
-
+
/**
* Given a set of params, executes a cursor query using {@link CursorMarkParams#CURSOR_MARK_START}
- * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as long
- * as a non-0 number of docs ar returned. This method does some basic validation of each response, and then
- * passes each doc encountered (in order returned) to the specified Consumer, which may throw an assertion if
- * there is a problem.
+ * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as
+ * long as a non-0 number of docs ar returned. This method does some basic validation of each
+ * response, and then passes each doc encountered (in order returned) to the specified Consumer,
+ * which may throw an assertion if there is a problem.
*/
- public void assertFullWalkNoDups(SolrParams params, Consumer<Map<Object,Object>> consumer)
- throws Exception {
-
+ public void assertFullWalkNoDups(SolrParams params, Consumer<Map<Object, Object>> consumer)
+ throws Exception {
+
String cursorMark = CURSOR_MARK_START;
int docsOnThisPage = Integer.MAX_VALUE;
while (0 < docsOnThisPage) {
- String json = assertJQ(req(params,
- CURSOR_MARK_PARAM, cursorMark));
+ String json = assertJQ(req(params, CURSOR_MARK_PARAM, cursorMark));
Map<?, ?> rsp = (Map<?, ?>) fromJSONString(json);
- assertTrue("response doesn't contain " + CURSOR_MARK_NEXT + ": " + json,
- rsp.containsKey(CURSOR_MARK_NEXT));
- String nextCursorMark = (String)rsp.get(CURSOR_MARK_NEXT);
+ assertTrue(
+ "response doesn't contain " + CURSOR_MARK_NEXT + ": " + json,
+ rsp.containsKey(CURSOR_MARK_NEXT));
+ String nextCursorMark = (String) rsp.get(CURSOR_MARK_NEXT);
assertNotNull(CURSOR_MARK_NEXT + " is null", nextCursorMark);
@SuppressWarnings("unchecked")
- List<Map<Object,Object>> docs = (List<Map<Object, Object>>) (((Map<?, ?>)rsp.get("response")).get("docs"));
+ List<Map<Object, Object>> docs =
+ (List<Map<Object, Object>>) (((Map<?, ?>) rsp.get("response")).get("docs"));
docsOnThisPage = docs.size();
if (null != params.getInt(CommonParams.ROWS)) {
int rows = params.getInt(CommonParams.ROWS);
- assertTrue("Too many docs on this page: " + rows + " < " + docsOnThisPage,
- docsOnThisPage <= rows);
+ assertTrue(
+ "Too many docs on this page: " + rows + " < " + docsOnThisPage, docsOnThisPage <= rows);
}
if (0 == docsOnThisPage) {
- assertEquals("no more docs, but "+CURSOR_MARK_NEXT+" isn't same",
- cursorMark, nextCursorMark);
+ assertEquals(
+ "no more docs, but " + CURSOR_MARK_NEXT + " isn't same", cursorMark, nextCursorMark);
}
- for (Map<Object,Object> doc : docs) {
+ for (Map<Object, Object> doc : docs) {
consumer.accept(doc);
}
cursorMark = nextCursorMark;
}
}
- /**
- * test faceting with deep paging
- */
+ /** test faceting with deep paging */
public void testFacetingWithRandomSorts() throws Exception {
final int numDocs = TestUtil.nextInt(random(), 1000, 3000);
- String[] fieldsToFacetOn = { "int", "long", "str" };
- String[] facetMethods = { "enum", "fc", "fcs" };
+ String[] fieldsToFacetOn = {"int", "long", "str"};
+ String[] facetMethods = {"enum", "fc", "fcs"};
for (int i = 1; i <= numDocs; i++) {
SolrInputDocument doc = buildRandomDocument(i);
@@ -904,31 +1026,41 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
String order = 0 == TestUtil.nextInt(random(), 0, 1) ? " asc" : " desc";
String sort = f + order + (f.equals("id") ? "" : ", id" + order);
String rows = "" + TestUtil.nextInt(random(), 13, 50);
- String facetField = fieldsToFacetOn
- [TestUtil.nextInt(random(), 0, fieldsToFacetOn.length - 1)];
- String facetMethod = facetMethods
- [TestUtil.nextInt(random(), 0, facetMethods.length - 1)];
- SentinelIntSet ids = assertFullWalkNoDupsWithFacets
- (numDocs, params("q", "*:*",
- "fl", "id," + facetField,
- "facet", "true",
- "facet.field", facetField,
- "facet.method", facetMethod,
- "facet.missing", "true",
- "facet.limit", "-1", // unlimited
- "rows", rows,
- "sort", sort));
+ String facetField = fieldsToFacetOn[TestUtil.nextInt(random(), 0, fieldsToFacetOn.length - 1)];
+ String facetMethod = facetMethods[TestUtil.nextInt(random(), 0, facetMethods.length - 1)];
+ SentinelIntSet ids =
+ assertFullWalkNoDupsWithFacets(
+ numDocs,
+ params(
+ "q",
+ "*:*",
+ "fl",
+ "id," + facetField,
+ "facet",
+ "true",
+ "facet.field",
+ facetField,
+ "facet.method",
+ facetMethod,
+ "facet.missing",
+ "true",
+ "facet.limit",
+ "-1", // unlimited
+ "rows",
+ rows,
+ "sort",
+ sort));
assertEquals(numDocs, ids.size());
}
/**
* Given a set of params, executes a cursor query using {@link CursorMarkParams#CURSOR_MARK_START}
- * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as long
- * as a non-0 number of docs ar returned. This method records the the set of all id's
- * (must be positive ints) encountered and throws an assertion failure if any id is
- * encountered more than once, or if the set grows above maxSize.
+ * and then continuously walks the results using {@link CursorMarkParams#CURSOR_MARK_START} as
+ * long as a non-0 number of docs ar returned. This method records the the set of all id's (must
+ * be positive ints) encountered and throws an assertion failure if any id is encountered more
+ * than once, or if the set grows above maxSize.
*
- * Also checks that facets are the same with each page, and that they are correct.
+ * <p>Also checks that facets are the same with each page, and that they are correct.
*/
public SentinelIntSet assertFullWalkNoDupsWithFacets(int maxSize, SolrParams params)
throws Exception {
@@ -937,7 +1069,7 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
assertNotNull("facet.field param not specified", facetField);
assertFalse("facet.field param contains multiple values", facetField.contains(","));
assertEquals("facet.limit param not set to -1", "-1", params.get("facet.limit"));
- final Map<String,MutableValueInt> facetCounts = new HashMap<>();
+ final Map<String, MutableValueInt> facetCounts = new HashMap<>();
SentinelIntSet ids = new SentinelIntSet(maxSize, -1);
String cursorMark = CURSOR_MARK_START;
int docsOnThisPage = Integer.MAX_VALUE;
@@ -945,28 +1077,31 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
while (0 < docsOnThisPage) {
String json = assertJQ(req(params, CURSOR_MARK_PARAM, cursorMark));
Map<?, ?> rsp = (Map<?, ?>) fromJSONString(json);
- assertTrue("response doesn't contain " + CURSOR_MARK_NEXT + ": " + json,
- rsp.containsKey(CURSOR_MARK_NEXT));
- String nextCursorMark = (String)rsp.get(CURSOR_MARK_NEXT);
+ assertTrue(
+ "response doesn't contain " + CURSOR_MARK_NEXT + ": " + json,
+ rsp.containsKey(CURSOR_MARK_NEXT));
+ String nextCursorMark = (String) rsp.get(CURSOR_MARK_NEXT);
assertNotNull(CURSOR_MARK_NEXT + " is null", nextCursorMark);
@SuppressWarnings({"unchecked"})
- List<Map<Object,Object>> docs = (List<Map<Object, Object>>)(((Map<?, ?>)rsp.get("response")).get("docs"));
+ List<Map<Object, Object>> docs =
+ (List<Map<Object, Object>>) (((Map<?, ?>) rsp.get("response")).get("docs"));
docsOnThisPage = docs.size();
if (null != params.getInt(CommonParams.ROWS)) {
int rows = params.getInt(CommonParams.ROWS);
- assertTrue("Too many docs on this page: " + rows + " < " + docsOnThisPage,
- docsOnThisPage <= rows);
+ assertTrue(
+ "Too many docs on this page: " + rows + " < " + docsOnThisPage, docsOnThisPage <= rows);
}
if (0 == docsOnThisPage) {
- assertEquals("no more docs, but "+CURSOR_MARK_NEXT+" isn't same",
- cursorMark, nextCursorMark);
+ assertEquals(
+ "no more docs, but " + CURSOR_MARK_NEXT + " isn't same", cursorMark, nextCursorMark);
}
- for (Map<Object,Object> doc : docs) {
+ for (Map<Object, Object> doc : docs) {
int id = Integer.parseInt(doc.get("id").toString());
assertFalse("walk already seen: " + id, ids.exists(id));
ids.put(id);
- assertFalse("id set bigger then max allowed ("+maxSize+"): " + ids.size(),
- maxSize < ids.size());
+ assertFalse(
+ "id set bigger then max allowed (" + maxSize + "): " + ids.size(),
+ maxSize < ids.size());
Object facet = doc.get(facetField);
String facetString = null == facet ? null : facet.toString(); // null: missing facet value
MutableValueInt count = facetCounts.get(facetString);
@@ -978,14 +1113,16 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
cursorMark = nextCursorMark;
- Map<?, ?> facetFields = (Map<?, ?>)((Map<?, ?>)rsp.get("facet_counts")).get("facet_fields");
- List<?> facets = (List<?>)facetFields.get(facetField);
+ Map<?, ?> facetFields = (Map<?, ?>) ((Map<?, ?>) rsp.get("facet_counts")).get("facet_fields");
+ List<?> facets = (List<?>) facetFields.get(facetField);
if (null != previousFacets) {
- assertEquals("Facets not the same as on previous page:\nprevious page facets: "
- + Arrays.toString(facets.toArray(new Object[facets.size()]))
- + "\ncurrent page facets: "
- + Arrays.toString(previousFacets.toArray(new Object[previousFacets.size()])),
- previousFacets, facets);
+ assertEquals(
+ "Facets not the same as on previous page:\nprevious page facets: "
+ + Arrays.toString(facets.toArray(new Object[facets.size()]))
+ + "\ncurrent page facets: "
+ + Arrays.toString(previousFacets.toArray(new Object[previousFacets.size()])),
+ previousFacets,
+ facets);
}
previousFacets = facets;
}
@@ -993,47 +1130,51 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
assertNotNull("previousFacets is null", previousFacets);
assertEquals("Mismatch in number of facets: ", facetCounts.size(), previousFacets.size() / 2);
int pos;
- for (pos = 0 ; pos < previousFacets.size() ; pos += 2) {
- String label = (String)previousFacets.get(pos);
- int expectedCount = ((Number)previousFacets.get(pos + 1)).intValue();
+ for (pos = 0; pos < previousFacets.size(); pos += 2) {
+ String label = (String) previousFacets.get(pos);
+ int expectedCount = ((Number) previousFacets.get(pos + 1)).intValue();
MutableValueInt count = facetCounts.get(label);
assertNotNull("Expected facet label #" + (pos / 2) + " not found: '" + label + "'", count);
- assertEquals("Facet count mismatch for label #" + (pos / 2) + " '" + label + "'", expectedCount,
- facetCounts.get(label).value);
+ assertEquals(
+ "Facet count mismatch for label #" + (pos / 2) + " '" + label + "'",
+ expectedCount,
+ facetCounts.get(label).value);
pos += 2;
}
return ids;
}
/**
- * Asserts that the query matches the specified JSON patterns and then returns the
- * {@link CursorMarkParams#CURSOR_MARK_NEXT} value from the response
+ * Asserts that the query matches the specified JSON patterns and then returns the {@link
+ * CursorMarkParams#CURSOR_MARK_NEXT} value from the response
*
* @see #assertJQ
*/
public String assertCursor(SolrQueryRequest req, String... tests) throws Exception {
String json = assertJQ(req, tests);
Map<?, ?> rsp = (Map<?, ?>) fromJSONString(json);
- assertTrue("response doesn't contain "+CURSOR_MARK_NEXT + ": " + json,
- rsp.containsKey(CURSOR_MARK_NEXT));
- String next = (String)rsp.get(CURSOR_MARK_NEXT);
+ assertTrue(
+ "response doesn't contain " + CURSOR_MARK_NEXT + ": " + json,
+ rsp.containsKey(CURSOR_MARK_NEXT));
+ String next = (String) rsp.get(CURSOR_MARK_NEXT);
assertNotNull(CURSOR_MARK_NEXT + " is null", next);
return next;
}
- /**
- * execute a local request, verify that we get an expected error
- */
- public void assertFail(SolrParams p, ErrorCode expCode, String expSubstr)
- throws Exception {
+ /** execute a local request, verify that we get an expected error */
+ public void assertFail(SolrParams p, ErrorCode expCode, String expSubstr) throws Exception {
try {
- SolrException e = expectThrows(SolrException.class, () -> {
- ignoreException(expSubstr);
- assertJQ(req(p));
- });
+ SolrException e =
+ expectThrows(
+ SolrException.class,
+ () -> {
+ ignoreException(expSubstr);
+ assertJQ(req(p));
+ });
assertEquals(expCode.code, e.code());
- assertTrue("Expected substr not found: " + expSubstr + " <!< " + e.getMessage(),
+ assertTrue(
+ "Expected substr not found: " + expSubstr + " <!< " + e.getMessage(),
e.getMessage().contains(expSubstr));
} finally {
unIgnoreException(expSubstr);
@@ -1041,10 +1182,10 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
/**
- * Creates a document with randomized field values, some of which be missing values,
- * and some of which will be skewed so that small subsets of the ranges will be
- * more common (resulting in an increased likelihood of duplicate values)
- *
+ * Creates a document with randomized field values, some of which be missing values, and some of
+ * which will be skewed so that small subsets of the ranges will be more common (resulting in an
+ * increased likelihood of duplicate values)
+ *
* @see #buildRandomQuery
*/
public static SolrInputDocument buildRandomDocument(int id) {
@@ -1053,24 +1194,24 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
// if field is in a doc, then "skewed" chance val is from a dense range
// (hopefully with lots of duplication)
if (useField()) {
- doc.addField("int", skewed(random().nextInt(),
- TestUtil.nextInt(random(), 20, 50)));
+ doc.addField("int", skewed(random().nextInt(), TestUtil.nextInt(random(), 20, 50)));
}
if (useField()) {
- doc.addField("long", skewed(random().nextLong(),
- TestUtil.nextInt(random(), 5000, 5100)));
+ doc.addField("long", skewed(random().nextLong(), TestUtil.nextInt(random(), 5000, 5100)));
}
if (useField()) {
- doc.addField("float", skewed(random().nextFloat() * random().nextInt(),
- 1.0F / random().nextInt(23)));
+ doc.addField(
+ "float", skewed(random().nextFloat() * random().nextInt(), 1.0F / random().nextInt(23)));
}
if (useField()) {
- doc.addField("double", skewed(random().nextDouble() * random().nextInt(),
- 1.0D / random().nextInt(37)));
+ doc.addField(
+ "double",
+ skewed(random().nextDouble() * random().nextInt(), 1.0D / random().nextInt(37)));
}
if (useField()) {
- doc.addField("str", skewed(randomXmlUsableUnicodeString(),
- TestUtil.randomSimpleString(random(), 1, 1)));
+ doc.addField(
+ "str",
+ skewed(randomXmlUsableUnicodeString(), TestUtil.randomSimpleString(random(), 1, 1)));
}
if (useField()) {
int numBytes = (int) skewed(TestUtil.nextInt(random(), 20, 50), 2);
@@ -1085,8 +1226,11 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
doc.addField("uuid", UUID.randomUUID().toString());
}
if (useField()) {
- doc.addField("currency", skewed("" + (random().nextInt() / 100.) + "," + randomCurrency(),
- "" + TestUtil.nextInt(random(), 250, 320) + ",USD"));
+ doc.addField(
+ "currency",
+ skewed(
+ "" + (random().nextInt() / 100.) + "," + randomCurrency(),
+ "" + TestUtil.nextInt(random(), 250, 320) + ",USD"));
}
if (useField()) {
doc.addField("bool", random().nextBoolean() ? "t" : "f");
@@ -1098,12 +1242,12 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
/**
- * Generates a random query using the fields populated by
- * {@link #buildRandomDocument}. Queries will typically be fairly simple, but
- * won't be so trivial that the scores are completely constant.
+ * Generates a random query using the fields populated by {@link #buildRandomDocument}. Queries
+ * will typically be fairly simple, but won't be so trivial that the scores are completely
+ * constant.
*/
public static String buildRandomQuery() {
- List<String> numericFields = Arrays.asList("int","long","float","double");
+ List<String> numericFields = Arrays.asList("int", "long", "float", "double");
Collections.shuffle(numericFields, random());
if (random().nextBoolean()) {
// simple function query across one field.
@@ -1112,14 +1256,20 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
// several SHOULD clauses on range queries
int low = TestUtil.nextInt(random(), -2379, 2);
int high = TestUtil.nextInt(random(), 4, 5713);
- return
- numericFields.get(0) + ":[* TO 0] " +
- numericFields.get(1) + ":[0 TO *] " +
- numericFields.get(2) + ":[" + low + " TO " + high + "]";
+ return numericFields.get(0)
+ + ":[* TO 0] "
+ + numericFields.get(1)
+ + ":[0 TO *] "
+ + numericFields.get(2)
+ + ":["
+ + low
+ + " TO "
+ + high
+ + "]";
}
}
- private static final String[] currencies = { "USD", "EUR", "NOK" };
+ private static final String[] currencies = {"USD", "EUR", "NOK"};
public static String randomCurrency() {
return currencies[random().nextInt(currencies.length)];
@@ -1130,8 +1280,8 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
/**
- * Given a list of fieldNames, builds up a random sort string which is guaranteed to
- * have at least 3 clauses, ending with the "id" field for tie breaking
+ * Given a list of fieldNames, builds up a random sort string which is guaranteed to have at least
+ * 3 clauses, ending with the "id" field for tie breaking
*/
public static String buildRandomSort(final Collection<String> fieldNames) {
@@ -1146,11 +1296,13 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
String field = shuffledNames.get(i);
// wrap in a function sometimes
- if ( ! "score".equals(field) && 0 == TestUtil.nextInt(random(), 0, 7)) {
+ if (!"score".equals(field) && 0 == TestUtil.nextInt(random(), 0, 7)) {
// specific function doesn't matter, just proving that we can handle the concept.
// but we do have to be careful with non numeric fields
- if (field.contains("float") || field.contains("double")
- || field.contains("int") || field.contains("long")) {
+ if (field.contains("float")
+ || field.contains("double")
+ || field.contains("int")
+ || field.contains("long")) {
field = "abs(" + field + ")";
} else {
field = "if(exists(" + field + "),47,83)";
@@ -1162,9 +1314,7 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
return result.toString();
}
- /**
- * Given a set of id, picks some, semi-randomly, to use for elevation
- */
+ /** Given a set of id, picks some, semi-randomly, to use for elevation */
public static int[] pickElevations(final int numToElevate, final SentinelIntSet ids) {
assert numToElevate < ids.size();
final int[] results = new int[numToElevate];
@@ -1188,5 +1338,4 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
}
return results;
}
-
}
diff --git a/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java
index dbd4c64..3c16be1 100644
--- a/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/DisMaxRequestHandlerTest.java
@@ -16,54 +16,90 @@
*/
package org.apache.solr;
+import java.util.regex.Pattern;
import org.apache.solr.common.params.CommonParams;
import org.junit.BeforeClass;
import org.junit.Test;
-import java.util.regex.Pattern;
-
-/**
- * Tests some basic functionality of the DisMaxRequestHandler
- */
+/** Tests some basic functionality of the DisMaxRequestHandler */
public class DisMaxRequestHandlerTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
- initCore("solrconfig.xml","schema.xml");
- lrf = h.getRequestFactory
- ("/dismax", 0, 20,
- CommonParams.VERSION,"2.2",
- "facet", "true",
- "facet.field","t_s"
- );
- /** Add some documents to the index */
- assertNull(h.validateUpdate(adoc("id", "666",
- "features_t", "cool and scary stuff",
- "subject", "traveling in hell",
- "t_s", "movie",
- "title", "The Omen",
- "weight", "87.9",
- "iind", "666")));
- assertNull(h.validateUpdate(adoc("id", "42",
- "features_t", "cool stuff",
- "subject", "traveling the galaxy",
- "t_s", "movie", "t_s", "book",
- "title", "Hitch Hiker's Guide to the Galaxy",
- "weight", "99.45",
- "iind", "42")));
- assertNull(h.validateUpdate(adoc("id", "1",
- "features_t", "nothing",
- "subject", "garbage",
- "t_s", "book",
- "title", "Most Boring Guide Ever",
- "weight", "77",
- "iind", "4")));
- assertNull(h.validateUpdate(adoc("id", "8675309",
- "features_t", "Wikedly memorable chorus and stuff",
- "subject", "One Cool Hot Chick",
- "t_s", "song",
- "title", "Jenny",
- "weight", "97.3",
- "iind", "8675309")));
+ initCore("solrconfig.xml", "schema.xml");
+ lrf =
+ h.getRequestFactory(
+ "/dismax", 0, 20, CommonParams.VERSION, "2.2", "facet", "true", "facet.field", "t_s");
+ /** Add some documents to the index */
+ assertNull(
+ h.validateUpdate(
+ adoc(
+ "id",
+ "666",
+ "features_t",
+ "cool and scary stuff",
+ "subject",
+ "traveling in hell",
+ "t_s",
+ "movie",
+ "title",
+ "The Omen",
+ "weight",
+ "87.9",
+ "iind",
+ "666")));
+ assertNull(
+ h.validateUpdate(
+ adoc(
+ "id",
+ "42",
+ "features_t",
+ "cool stuff",
+ "subject",
+ "traveling the galaxy",
+ "t_s",
+ "movie",
+ "t_s",
+ "book",
+ "title",
+ "Hitch Hiker's Guide to the Galaxy",
+ "weight",
+ "99.45",
+ "iind",
+ "42")));
+ assertNull(
+ h.validateUpdate(
+ adoc(
+ "id",
+ "1",
+ "features_t",
+ "nothing",
+ "subject",
+ "garbage",
+ "t_s",
+ "book",
+ "title",
+ "Most Boring Guide Ever",
+ "weight",
+ "77",
+ "iind",
+ "4")));
+ assertNull(
+ h.validateUpdate(
+ adoc(
+ "id",
+ "8675309",
+ "features_t",
+ "Wikedly memorable chorus and stuff",
+ "subject",
+ "One Cool Hot Chick",
+ "t_s",
+ "song",
+ "title",
+ "Jenny",
+ "weight",
+ "97.3",
+ "iind",
+ "8675309")));
assertNull(h.validateUpdate(commit()));
}
@@ -71,124 +107,130 @@ public class DisMaxRequestHandlerTest extends SolrTestCaseJ4 {
public void testSomeStuff() throws Exception {
doTestSomeStuff("/dismax");
}
+
public void doTestSomeStuff(final String qt) throws Exception {
- assertQ("basic match",
- req("guide")
- ,"//*[@numFound='2']"
- ,"//lst[@name='facet_fields']/lst[@name='t_s']"
- ,"*[count(//lst[@name='t_s']/int)=3]"
- ,"//lst[@name='t_s']/int[@name='book'][.='2']"
- ,"//lst[@name='t_s']/int[@name='movie'][.='1']"
- );
-
- assertQ("basic cross field matching, boost on same field matching",
- req("cool stuff")
- ,"//*[@numFound='3']"
- ,"//result/doc[1]/str[@name='id'][.='42']"
- ,"//result/doc[2]/str[@name='id'][.='8675309']"
- ,"//result/doc[3]/str[@name='id'][.='666']"
- );
-
- assertQ("multi qf",
- req("q", "cool"
- ,"qt", qt
- ,CommonParams.VERSION, "2.2"
- ,"qf", "subject"
- ,"qf", "features_t"
- )
- ,"//*[@numFound='3']"
- );
-
- assertQ("multi qf as local params",
- req("q", "{!dismax qf=subject qf=features_t}cool")
- ,"//*[@numFound='3']"
- );
-
- assertQ("boost query",
- req("q", "cool stuff"
- ,"qt", qt
- ,CommonParams.VERSION, "2.2"
- ,"bq", "subject:hell^400"
- )
- ,"//*[@numFound='3']"
- ,"//result/doc[1]/str[@name='id'][.='666']"
- ,"//result/doc[2]/str[@name='id'][.='42']"
- ,"//result/doc[3]/str[@name='id'][.='8675309']"
- );
-
- assertQ("multi boost query",
- req("q", "cool stuff"
- ,"qt", qt
- ,CommonParams.VERSION, "2.2"
- ,"bq", "subject:hell^400"
- ,"bq", "subject:cool^4"
- , CommonParams.DEBUG_QUERY, "true"
- )
- ,"//*[@numFound='3']"
- ,"//result/doc[1]/str[@name='id'][.='666']"
- ,"//result/doc[2]/str[@name='id'][.='8675309']"
- ,"//result/doc[3]/str[@name='id'][.='42']"
- );
-
- assertQ("minimum mm is three",
- req("cool stuff traveling")
- ,"//*[@numFound='2']"
- ,"//result/doc[1]/str[@name='id'][. ='42']"
- ,"//result/doc[2]/str[@name='id'][. ='666']"
- );
-
- assertQ("at 4 mm allows one missing ",
- req("cool stuff traveling jenny")
- ,"//*[@numFound='3']"
- );
-
- assertQ("relying on ALTQ from config",
- req( "qt", qt,
- "fq", "id:666",
- "facet", "false" )
- ,"//*[@numFound='1']"
- );
-
- assertQ("explicit ALTQ",
- req( "qt", qt,
- "q.alt", "id:9999",
- "fq", "id:666",
- "facet", "false" )
- ,"//*[@numFound='0']"
- );
-
- assertQ("no query slop == no match",
- req( "qt", qt,
- "q", "\"cool chick\"" )
- ,"//*[@numFound='0']"
- );
- assertQ("query slop == match",
- req( "qt", qt,
- "qs", "2",
- "q", "\"cool chick\"" )
- ,"//*[@numFound='1']"
- );
+ assertQ(
+ "basic match",
+ req("guide"),
+ "//*[@numFound='2']",
+ "//lst[@name='facet_fields']/lst[@name='t_s']",
+ "*[count(//lst[@name='t_s']/int)=3]",
+ "//lst[@name='t_s']/int[@name='book'][.='2']",
+ "//lst[@name='t_s']/int[@name='movie'][.='1']");
+
+ assertQ(
+ "basic cross field matching, boost on same field matching",
+ req("cool stuff"),
+ "//*[@numFound='3']",
+ "//result/doc[1]/str[@name='id'][.='42']",
+ "//result/doc[2]/str[@name='id'][.='8675309']",
+ "//result/doc[3]/str[@name='id'][.='666']");
+
+ assertQ(
+ "multi qf",
+ req(
+ "q",
+ "cool",
+ "qt",
+ qt,
+ CommonParams.VERSION,
+ "2.2",
+ "qf",
+ "subject",
+ "qf",
+ "features_t"),
+ "//*[@numFound='3']");
+
+ assertQ(
+ "multi qf as local params",
+ req("q", "{!dismax qf=subject qf=features_t}cool"),
+ "//*[@numFound='3']");
+ assertQ(
+ "boost query",
+ req("q", "cool stuff", "qt", qt, CommonParams.VERSION, "2.2", "bq", "subject:hell^400"),
+ "//*[@numFound='3']",
+ "//result/doc[1]/str[@name='id'][.='666']",
+ "//result/doc[2]/str[@name='id'][.='42']",
+ "//result/doc[3]/str[@name='id'][.='8675309']");
+
+ assertQ(
+ "multi boost query",
+ req(
+ "q",
+ "cool stuff",
+ "qt",
+ qt,
+ CommonParams.VERSION,
+ "2.2",
+ "bq",
+ "subject:hell^400",
+ "bq",
+ "subject:cool^4",
+ CommonParams.DEBUG_QUERY,
+ "true"),
+ "//*[@numFound='3']",
+ "//result/doc[1]/str[@name='id'][.='666']",
+ "//result/doc[2]/str[@name='id'][.='8675309']",
+ "//result/doc[3]/str[@name='id'][.='42']");
+
+ assertQ(
+ "minimum mm is three",
+ req("cool stuff traveling"),
+ "//*[@numFound='2']",
+ "//result/doc[1]/str[@name='id'][. ='42']",
+ "//result/doc[2]/str[@name='id'][. ='666']");
+
+ assertQ("at 4 mm allows one missing ", req("cool stuff traveling jenny"), "//*[@numFound='3']");
+
+ assertQ(
+ "relying on ALTQ from config",
+ req(
+ "qt", qt,
+ "fq", "id:666",
+ "facet", "false"),
+ "//*[@numFound='1']");
+
+ assertQ(
+ "explicit ALTQ",
+ req(
+ "qt", qt,
+ "q.alt", "id:9999",
+ "fq", "id:666",
+ "facet", "false"),
+ "//*[@numFound='0']");
+
+ assertQ(
+ "no query slop == no match", req("qt", qt, "q", "\"cool chick\""), "//*[@numFound='0']");
+ assertQ(
+ "query slop == match",
+ req(
+ "qt", qt,
+ "qs", "2",
+ "q", "\"cool chick\""),
+ "//*[@numFound='1']");
}
@Test
public void testSubQueriesNotSupported() {
// See org.apache.solr.search.TestSolrQueryParser.testNestedQueryModifiers()
- assertQ("don't parse subqueries",
- req("defType", "dismax",
+ assertQ(
+ "don't parse subqueries",
+ req(
+ "defType", "dismax",
"df", "doesnotexist_s",
"q", "_query_:\"{!v=$qq}\"",
- "qq", "features_t:cool")
- ,"//*[@numFound='0']"
- );
- assertQ("don't parse subqueries",
- req("defType", "dismax",
+ "qq", "features_t:cool"),
+ "//*[@numFound='0']");
+ assertQ(
+ "don't parse subqueries",
+ req(
+ "defType", "dismax",
"df", "doesnotexist_s",
"q", "{!v=$qq}",
- "qq", "features_t:cool")
- ,"//*[@numFound='0']"
- );
+ "qq", "features_t:cool"),
+ "//*[@numFound='0']");
}
@Test
@@ -198,25 +240,38 @@ public class DisMaxRequestHandlerTest extends SolrTestCaseJ4 {
// surrounded by ()'s in the debug output
Pattern p = Pattern.compile("subject:hell\\s*subject:cool");
Pattern p_bool = Pattern.compile("\\(subject:hell\\s*subject:cool\\)");
- String resp = h.query(req("q", "cool stuff"
- ,"qt", "/dismax"
- ,CommonParams.VERSION, "2.2"
- ,"bq", "subject:hell OR subject:cool"
- ,CommonParams.DEBUG_QUERY, "true"
- ));
+ String resp =
+ h.query(
+ req(
+ "q",
+ "cool stuff",
+ "qt",
+ "/dismax",
+ CommonParams.VERSION,
+ "2.2",
+ "bq",
+ "subject:hell OR subject:cool",
+ CommonParams.DEBUG_QUERY,
+ "true"));
assertTrue(p.matcher(resp).find());
assertFalse(p_bool.matcher(resp).find());
- resp = h.query(req("q", "cool stuff"
- ,"qt", "/dismax"
- ,CommonParams.VERSION, "2.2"
- ,"bq", "subject:hell OR subject:cool"
- ,"bq",""
- ,CommonParams.DEBUG_QUERY, "true"
- ));
+ resp =
+ h.query(
+ req(
+ "q",
+ "cool stuff",
+ "qt",
+ "/dismax",
+ CommonParams.VERSION,
+ "2.2",
+ "bq",
+ "subject:hell OR subject:cool",
+ "bq",
+ "",
+ CommonParams.DEBUG_QUERY,
+ "true"));
assertTrue(p.matcher(resp).find());
assertTrue(p_bool.matcher(resp).find());
-
}
-
}
diff --git a/solr/core/src/test/org/apache/solr/DistributedIntervalFacetingTest.java b/solr/core/src/test/org/apache/solr/DistributedIntervalFacetingTest.java
index 7cbd372..ff52ff0 100644
--- a/solr/core/src/test/org/apache/solr/DistributedIntervalFacetingTest.java
+++ b/solr/core/src/test/org/apache/solr/DistributedIntervalFacetingTest.java
@@ -18,7 +18,6 @@ package org.apache.solr;
import java.util.Arrays;
import java.util.List;
-
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrQuery;
@@ -29,10 +28,10 @@ import org.junit.BeforeClass;
import org.junit.Test;
@Slow
-@SuppressSSL(bugUrl="https://issues.apache.org/jira/browse/SOLR-9182 - causes OOM")
-// See: https://issues.apache.org/jira/browse/SOLR-12028 Tests cannot remove files on Windows machines occasionally
-public class DistributedIntervalFacetingTest extends
- BaseDistributedSearchTestCase {
+@SuppressSSL(bugUrl = "https://issues.apache.org/jira/browse/SOLR-9182 - causes OOM")
+// See: https://issues.apache.org/jira/browse/SOLR-12028 Tests cannot remove files on Windows
+// machines occasionally
+public class DistributedIntervalFacetingTest extends BaseDistributedSearchTestCase {
@BeforeClass
public static void beforeSuperClass() throws Exception {
@@ -56,12 +55,12 @@ public class DistributedIntervalFacetingTest extends
indexr("id", "2", "test_i_dv", "2", "test_s_dv", "AAA");
indexr("id", "3", "test_i_dv", "3", "test_s_dv", "CCC");
commit();
-
+
QueryResponse response = controlClient.query(new SolrQuery("*:*"));
assertEquals(4, response.getResults().getNumFound());
-
+
SolrQuery q = new SolrQuery("*:*");
- String[] intervals = new String[]{"[0,1)","[1,2)", "[2,3)", "[3,*)"};
+ String[] intervals = new String[] {"[0,1)", "[1,2)", "[2,3)", "[3,*)"};
q.addIntervalFacets("test_i_dv", intervals);
response = controlClient.query(q);
assertEquals(1, response.getIntervalFacets().size());
@@ -72,32 +71,38 @@ public class DistributedIntervalFacetingTest extends
assertEquals(intervals[i], count.getKey());
assertEquals(1, count.getCount());
}
-
+
q = new SolrQuery("*:*");
q.addIntervalFacets("test_i_dv", intervals);
- q.addIntervalFacets("test_s_dv", new String[]{"{!key='AAA'}[AAA,AAA]", "{!key='BBB'}[BBB,BBB]", "{!key='CCC'}[CCC,CCC]"});
+ q.addIntervalFacets(
+ "test_s_dv",
+ new String[] {"{!key='AAA'}[AAA,AAA]", "{!key='BBB'}[BBB,BBB]", "{!key='CCC'}[CCC,CCC]"});
response = controlClient.query(q);
assertEquals(2, response.getIntervalFacets().size());
-
- int stringIntervalIndex = "test_s_dv".equals(response.getIntervalFacets().get(0).getField())?0:1;
-
- assertEquals("test_i_dv", response.getIntervalFacets().get(1-stringIntervalIndex).getField());
+
+ int stringIntervalIndex =
+ "test_s_dv".equals(response.getIntervalFacets().get(0).getField()) ? 0 : 1;
+
+ assertEquals("test_i_dv", response.getIntervalFacets().get(1 - stringIntervalIndex).getField());
assertEquals("test_s_dv", response.getIntervalFacets().get(stringIntervalIndex).getField());
-
- for (int i = 0; i < response.getIntervalFacets().get(1-stringIntervalIndex).getIntervals().size(); i++) {
- Count count = response.getIntervalFacets().get(1-stringIntervalIndex).getIntervals().get(i);
+
+ for (int i = 0;
+ i < response.getIntervalFacets().get(1 - stringIntervalIndex).getIntervals().size();
+ i++) {
+ Count count = response.getIntervalFacets().get(1 - stringIntervalIndex).getIntervals().get(i);
assertEquals(intervals[i], count.getKey());
assertEquals(1, count.getCount());
}
-
- List<Count> stringIntervals = response.getIntervalFacets().get(stringIntervalIndex).getIntervals();
+
+ List<Count> stringIntervals =
+ response.getIntervalFacets().get(stringIntervalIndex).getIntervals();
assertEquals(3, stringIntervals.size());
assertEquals("AAA", stringIntervals.get(0).getKey());
assertEquals(2, stringIntervals.get(0).getCount());
-
+
assertEquals("BBB", stringIntervals.get(1).getKey());
assertEquals(1, stringIntervals.get(1).getCount());
-
+
assertEquals("CCC", stringIntervals.get(2).getKey());
assertEquals(1, stringIntervals.get(2).getCount());
}
@@ -106,17 +111,28 @@ public class DistributedIntervalFacetingTest extends
// All field values will be a number between 0 and cardinality
int cardinality = 1000000;
// Fields to use for interval faceting
- String[] fields = new String[]{"test_s_dv", "test_i_dv", "test_l_dv", "test_f_dv", "test_d_dv",
- "test_ss_dv", "test_is_dv", "test_fs_dv", "test_ls_dv", "test_ds_dv"};
+ String[] fields =
+ new String[] {
+ "test_s_dv",
+ "test_i_dv",
+ "test_l_dv",
+ "test_f_dv",
+ "test_d_dv",
+ "test_ss_dv",
+ "test_is_dv",
+ "test_fs_dv",
+ "test_ls_dv",
+ "test_ds_dv"
+ };
for (int i = 0; i < atLeast(500); i++) {
if (random().nextInt(50) == 0) {
- //have some empty docs
+ // have some empty docs
indexr("id", String.valueOf(i));
continue;
}
if (random().nextInt(100) == 0 && i > 0) {
- //delete some docs
+ // delete some docs
del("id:" + String.valueOf(i - 1));
}
Object[] docFields = new Object[(random().nextInt(5)) * 10 + 12];
@@ -156,30 +172,28 @@ public class DistributedIntervalFacetingTest extends
handle.put("timestamp", SKIPVAL);
handle.put("maxScore", SKIPVAL);
-
for (int i = 0; i < atLeast(100); i++) {
doTestQuery(cardinality, fields);
}
-
}
/**
- * Executes one query using interval faceting and compares with the same query using
- * facet query with the same range
+ * Executes one query using interval faceting and compares with the same query using facet query
+ * with the same range
*/
private void doTestQuery(int cardinality, String[] fields) throws Exception {
- String[] startOptions = new String[]{"(", "["};
- String[] endOptions = new String[]{")", "]"};
+ String[] startOptions = new String[] {"(", "["};
+ String[] endOptions = new String[] {")", "]"};
// the query should match some documents in most cases
Integer[] qRange = getRandomRange(cardinality, "id");
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("q", "id:[" + qRange[0] + " TO " + qRange[1] + "]");
params.set("facet", "true");
params.set("rows", "0");
- String field = fields[random().nextInt(fields.length)]; //choose from any of the fields
+ String field = fields[random().nextInt(fields.length)]; // choose from any of the fields
if (random().nextBoolean()) {
params.set("facet.interval", field);
- } else {
+ } else {
params.set("facet.interval", getFieldWithKey(field));
}
// number of intervals
@@ -187,10 +201,10 @@ public class DistributedIntervalFacetingTest extends
Integer[] interval = getRandomRange(cardinality, field);
String open = startOptions[interval[0] % 2];
String close = endOptions[interval[1] % 2];
- params.add("f." + field + ".facet.interval.set", open + interval[0] + "," + interval[1] + close);
+ params.add(
+ "f." + field + ".facet.interval.set", open + interval[0] + "," + interval[1] + close);
}
query(params);
-
}
private String getFieldWithKey(String field) {
@@ -198,11 +212,9 @@ public class DistributedIntervalFacetingTest extends
}
/**
- * Returns a random range. It's guaranteed that the first
- * number will be lower than the second, and both of them
- * between 0 (inclusive) and <code>max</code> (exclusive).
- * If the fieldName is "test_s_dv" or "test_ss_dv" (the
- * two fields used for Strings), the comparison will be done
+ * Returns a random range. It's guaranteed that the first number will be lower than the second,
+ * and both of them between 0 (inclusive) and <code>max</code> (exclusive). If the fieldName is
+ * "test_s_dv" or "test_ss_dv" (the two fields used for Strings), the comparison will be done
* alphabetically
*/
private Integer[] getRandomRange(int max, String fieldName) {
diff --git a/solr/core/src/test/org/apache/solr/EchoParamsTest.java b/solr/core/src/test/org/apache/solr/EchoParamsTest.java
index 44699e8..1ed909d 100644
--- a/solr/core/src/test/org/apache/solr/EchoParamsTest.java
+++ b/solr/core/src/test/org/apache/solr/EchoParamsTest.java
@@ -21,16 +21,15 @@ import org.junit.BeforeClass;
import org.junit.Test;
/** Test SOLR-59, echo of query parameters */
-
public class EchoParamsTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
- initCore("solr/crazy-path-to-config.xml","solr/crazy-path-to-schema.xml");
+ initCore("solr/crazy-path-to-config.xml", "solr/crazy-path-to-schema.xml");
}
private static final String HEADER_XPATH = "/response/lst[@name='responseHeader']";
-
+
@Test
public void test() {
defaultEchoParams();
@@ -39,42 +38,51 @@ public class EchoParamsTest extends SolrTestCaseJ4 {
allEchoParams();
}
- // the following test methods rely on their order, which is no longer guaranteed by Java 7, so call them directly above:
-
+ // the following test methods rely on their order, which is no longer guaranteed by Java 7, so
+ // call them directly above:
+
private void defaultEchoParams() {
lrf.args.put("wt", "xml");
- lrf.args.put(CommonParams.VERSION, "2.2");
- assertQ(req("foo"),HEADER_XPATH + "/int[@name='status']");
- assertQ(req("foo"),"not(//lst[@name='params'])");
+ lrf.args.put(CommonParams.VERSION, "2.2");
+ assertQ(req("foo"), HEADER_XPATH + "/int[@name='status']");
+ assertQ(req("foo"), "not(//lst[@name='params'])");
}
private void defaultEchoParamsDefaultVersion() {
lrf.args.put("wt", "xml");
- lrf.args.remove(CommonParams.VERSION);
- assertQ(req("foo"),HEADER_XPATH + "/int[@name='status']");
- assertQ(req("foo"),"not(//lst[@name='params'])");
+ lrf.args.remove(CommonParams.VERSION);
+ assertQ(req("foo"), HEADER_XPATH + "/int[@name='status']");
+ assertQ(req("foo"), "not(//lst[@name='params'])");
}
private void explicitEchoParams() {
lrf.args.put("wt", "xml");
lrf.args.put(CommonParams.VERSION, "2.2");
lrf.args.put("echoParams", "explicit");
- assertQ(req("foo"),HEADER_XPATH + "/int[@name='status']");
- assertQ(req("foo"),HEADER_XPATH + "/lst[@name='params']");
- assertQ(req("foo"),HEADER_XPATH + "/lst[@name='params']/str[@name='wt'][.='xml']");
+ assertQ(req("foo"), HEADER_XPATH + "/int[@name='status']");
+ assertQ(req("foo"), HEADER_XPATH + "/lst[@name='params']");
+ assertQ(req("foo"), HEADER_XPATH + "/lst[@name='params']/str[@name='wt'][.='xml']");
}
private void allEchoParams() {
- lrf = h.getRequestFactory
- ("/crazy_custom_qt", 0, 20,
- CommonParams.VERSION,"2.2",
- "wt","xml",
- "echoParams", "all",
- "echoHandler","true"
- );
+ lrf =
+ h.getRequestFactory(
+ "/crazy_custom_qt",
+ 0,
+ 20,
+ CommonParams.VERSION,
+ "2.2",
+ "wt",
+ "xml",
+ "echoParams",
+ "all",
+ "echoHandler",
+ "true");
- assertQ(req("foo"),HEADER_XPATH + "/lst[@name='params']/str[@name='fl'][.='implicit']");
- assertQ(req("foo"),HEADER_XPATH + "/str[@name='handler'][.='org.apache.solr.handler.component.SearchHandler']");
+ assertQ(req("foo"), HEADER_XPATH + "/lst[@name='params']/str[@name='fl'][.='implicit']");
+ assertQ(
+ req("foo"),
+ HEADER_XPATH
+ + "/str[@name='handler'][.='org.apache.solr.handler.component.SearchHandler']");
}
-
}
diff --git a/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java b/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java
index 0f4bf04..270ab6c 100644
--- a/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java
+++ b/solr/core/src/test/org/apache/solr/HelloWorldSolrCloudTestCase.java
@@ -23,25 +23,21 @@ import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.SolrInputDocument;
-
import org.junit.BeforeClass;
import org.junit.Test;
/**
- * How to use this test class:
- * #1 Run the test, e.g.
- * in Eclipse 'Run As JUnit Test' or
- * on the command line: ./gradlew -p solr/core test --tests HelloWorldSolrCloudTestCase
- * #2 Modify the test, e.g.
- * in setupCluster add further documents and then re-run the test.
+ * How to use this test class: #1 Run the test, e.g. in Eclipse 'Run As JUnit Test' or on the
+ * command line: ./gradlew -p solr/core test --tests HelloWorldSolrCloudTestCase #2 Modify the test,
+ * e.g. in setupCluster add further documents and then re-run the test.
*/
public class HelloWorldSolrCloudTestCase extends SolrCloudTestCase {
- private static final String COLLECTION = "hello_world" ;
+ private static final String COLLECTION = "hello_world";
private static final int numShards = 3;
private static final int numReplicas = 2;
- private static final int nodeCount = numShards*numReplicas;
+ private static final int nodeCount = numShards * numReplicas;
private static final String id = "id";
@@ -49,22 +45,24 @@ public class HelloWorldSolrCloudTestCase extends SolrCloudTestCase {
public static void setupCluster() throws Exception {
// create and configure cluster
- configureCluster(nodeCount)
- .addConfig("conf", configset("cloud-dynamic"))
- .configure();
+ configureCluster(nodeCount).addConfig("conf", configset("cloud-dynamic")).configure();
// create an empty collection
CollectionAdminRequest.createCollection(COLLECTION, "conf", numShards, numReplicas)
.process(cluster.getSolrClient());
// add a document
- final SolrInputDocument doc1 = sdoc(id, "1",
- "title_s", "Here comes the sun",
- "artist_s", "The Beatles",
- "popularity_i", "123");
- new UpdateRequest()
- .add(doc1)
- .commit(cluster.getSolrClient(), COLLECTION);
+ final SolrInputDocument doc1 =
+ sdoc(
+ id,
+ "1",
+ "title_s",
+ "Here comes the sun",
+ "artist_s",
+ "The Beatles",
+ "popularity_i",
+ "123");
+ new UpdateRequest().add(doc1).commit(cluster.getSolrClient(), COLLECTION);
// add further document(s) here
// TODO
@@ -72,7 +70,9 @@ public class HelloWorldSolrCloudTestCase extends SolrCloudTestCase {
@Test
public void testHighestScoring() throws Exception {
- final SolrQuery solrQuery = new SolrQuery("q", "*:*", "fl", "id,popularity_i", "sort", "popularity_i desc", "rows", "1");
+ final SolrQuery solrQuery =
+ new SolrQuery(
+ "q", "*:*", "fl", "id,popularity_i", "sort", "popularity_i desc", "rows", "1");
final CloudSolrClient cloudSolrClient = cluster.getSolrClient();
final QueryResponse rsp = cloudSolrClient.query(COLLECTION, solrQuery);
assertEquals(1, rsp.getResults().size());
@@ -81,12 +81,11 @@ public class HelloWorldSolrCloudTestCase extends SolrCloudTestCase {
@Test
public void testLowestScoring() throws Exception {
- final SolrQuery solrQuery = new SolrQuery("q", "*:*", "fl", "id,popularity_i", "sort", "popularity_i asc", "rows", "1");
+ final SolrQuery solrQuery =
+ new SolrQuery("q", "*:*", "fl", "id,popularity_i", "sort", "popularity_i asc", "rows", "1");
final CloudSolrClient cloudSolrClient = cluster.getSolrClient();
final QueryResponse rsp = cloudSolrClient.query(COLLECTION, solrQuery);
assertEquals(1, rsp.getResults().size());
assertEquals("1", rsp.getResults().get(0).getFieldValue(id));
}
-
}
-
diff --git a/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java b/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java
index 8e0f8db..a0bbd49 100644
--- a/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java
+++ b/solr/core/src/test/org/apache/solr/MinimalSchemaTest.java
@@ -16,87 +16,78 @@
*/
package org.apache.solr;
+import java.util.Set;
import org.apache.solr.common.params.CommonParams;
import org.junit.BeforeClass;
import org.junit.Test;
-import java.util.Set;
-
-/**
- * A test of basic features using the minial legal solr schema.
- */
+/** A test of basic features using the minial legal solr schema. */
public class MinimalSchemaTest extends SolrTestCaseJ4 {
/**
- * NOTE: we explicitly use the general 'solrconfig.xml' file here, in
- * an attempt to test as many broad features as possible.
+ * NOTE: we explicitly use the general 'solrconfig.xml' file here, in an attempt to test as many
+ * broad features as possible.
*
- * Do not change this to point at some other "simpler" solrconfig.xml
- * just because you want to add a new test case using solrconfig.xml,
- * but your new testcase adds a feature that breaks this test.
+ * <p>Do not change this to point at some other "simpler" solrconfig.xml just because you want to
+ * add a new test case using solrconfig.xml, but your new testcase adds a feature that breaks this
+ * test.
*/
@BeforeClass
public static void beforeClass() throws Exception {
- initCore("solr/collection1/conf/solrconfig.xml","solr/collection1/conf/schema-minimal.xml");
+ initCore("solr/collection1/conf/solrconfig.xml", "solr/collection1/conf/schema-minimal.xml");
- /* make sure some misguided soul doesn't inadvertently give us
+ /* make sure some misguided soul doesn't inadvertently give us
a uniqueKey field and defeat the point of the tests
*/
- assertNull("UniqueKey Field isn't null",
- h.getCore().getLatestSchema().getUniqueKeyField());
-
- lrf.args.put(CommonParams.VERSION,"2.2");
-
- assertNull("Simple assertion that adding a document works", h.validateUpdate(
- adoc("id", "4055",
- "subject", "Hoss",
- "project", "Solr")));
- assertNull(h.validateUpdate(adoc("id", "4056",
- "subject", "Yonik",
- "project", "Solr")));
+ assertNull("UniqueKey Field isn't null", h.getCore().getLatestSchema().getUniqueKeyField());
+
+ lrf.args.put(CommonParams.VERSION, "2.2");
+
+ assertNull(
+ "Simple assertion that adding a document works",
+ h.validateUpdate(
+ adoc(
+ "id", "4055",
+ "subject", "Hoss",
+ "project", "Solr")));
+ assertNull(h.validateUpdate(adoc("id", "4056", "subject", "Yonik", "project", "Solr")));
assertNull(h.validateUpdate(commit()));
assertNull(h.validateUpdate(optimize()));
-
}
@Test
public void testSimpleQueries() {
- assertQ("couldn't find subject hoss",
- req("subject:Hoss")
- ,"//result[@numFound=1]"
- ,"//str[@name='id'][.='4055']"
- );
-
- assertQ("couldn't find subject Yonik",
- req("subject:Yonik")
- ,"//result[@numFound=1]"
- ,"//str[@name='id'][.='4056']"
- );
+ assertQ(
+ "couldn't find subject hoss",
+ req("subject:Hoss"),
+ "//result[@numFound=1]",
+ "//str[@name='id'][.='4055']");
+
+ assertQ(
+ "couldn't find subject Yonik",
+ req("subject:Yonik"),
+ "//result[@numFound=1]",
+ "//str[@name='id'][.='4056']");
}
/** SOLR-1371 */
@Test
public void testLuke() {
-
- assertQ("basic luke request failed",
- req("qt", "/admin/luke")
- ,"//int[@name='numDocs'][.='2']"
- );
- assertQ("luke show schema failed",
- req("qt", "/admin/luke",
- "show","schema")
- ,"//int[@name='numDocs'][.='2']"
- ,"//null[@name='uniqueKeyField']"
- );
+ assertQ("basic luke request failed", req("qt", "/admin/luke"), "//int[@name='numDocs'][.='2']");
+ assertQ(
+ "luke show schema failed",
+ req(
+ "qt", "/admin/luke",
+ "show", "schema"),
+ "//int[@name='numDocs'][.='2']",
+ "//null[@name='uniqueKeyField']");
}
-
- /**
- * Iterates over all (non "/update/*") handlers in the core and hits
- * them with a request (using some simple params) to verify that they
- * don't generate an error against the minimal schema
+ /**
+ * Iterates over all (non "/update/*") handlers in the core and hits them with a request (using
+ * some simple params) to verify that they don't generate an error against the minimal schema
*/
@Test
public void testAllConfiguredHandlers() {
@@ -104,39 +95,34 @@ public class MinimalSchemaTest extends SolrTestCaseJ4 {
for (String handler : handlerNames) {
try {
-
- if (handler.startsWith("/update") ||
- handler.startsWith("/admin") ||
- handler.startsWith("/schema") ||
- handler.startsWith("/config") ||
- handler.startsWith("/mlt") ||
- handler.startsWith("/export") ||
- handler.startsWith("/graph") ||
- handler.startsWith("/sql") ||
- handler.startsWith("/stream") ||
- handler.startsWith("/terms") ||
- handler.startsWith("/analysis/")||
- handler.startsWith("/debug/") ||
- handler.startsWith("/replication") ||
- handler.startsWith("/tasks")
- ) {
+ if (handler.startsWith("/update")
+ || handler.startsWith("/admin")
+ || handler.startsWith("/schema")
+ || handler.startsWith("/config")
+ || handler.startsWith("/mlt")
+ || handler.startsWith("/export")
+ || handler.startsWith("/graph")
+ || handler.startsWith("/sql")
+ || handler.startsWith("/stream")
+ || handler.startsWith("/terms")
+ || handler.startsWith("/analysis/")
+ || handler.startsWith("/debug/")
+ || handler.startsWith("/replication")
+ || handler.startsWith("/tasks")) {
continue;
}
- assertQ("failure w/handler: '" + handler + "'",
- req("qt", handler,
- // this should be fairly innocuous for any type of query
- "q", "foo:bar",
- "omitHeader", "false"
- )
- ,"//lst[@name='responseHeader']"
- );
+ assertQ(
+ "failure w/handler: '" + handler + "'",
+ req(
+ "qt", handler,
+ // this should be fairly innocuous for any type of query
+ "q", "foo:bar",
+ "omitHeader", "false"),
+ "//lst[@name='responseHeader']");
} catch (Exception e) {
- throw new RuntimeException("exception w/handler: '" + handler + "'",
- e);
+ throw new RuntimeException("exception w/handler: '" + handler + "'", e);
}
}
}
}
-
-
diff --git a/solr/core/src/test/org/apache/solr/OutputWriterTest.java b/solr/core/src/test/org/apache/solr/OutputWriterTest.java
index ff88fe0..6760c84 100644
--- a/solr/core/src/test/org/apache/solr/OutputWriterTest.java
+++ b/solr/core/src/test/org/apache/solr/OutputWriterTest.java
@@ -18,7 +18,6 @@ package org.apache.solr;
import java.io.IOException;
import java.io.Writer;
-
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.core.PluginBag;
import org.apache.solr.request.SolrQueryRequest;
@@ -27,77 +26,70 @@ import org.apache.solr.response.SolrQueryResponse;
import org.junit.BeforeClass;
import org.junit.Test;
-/** Tests the ability to configure multiple query output writers, and select those
- * at query time.
- *
- */
+/** Tests the ability to configure multiple query output writers, and select those at query time. */
public class OutputWriterTest extends SolrTestCaseJ4 {
- /** The XML string that's output for testing purposes. */
- public static final String USELESS_OUTPUT = "useless output";
-
- @BeforeClass
- public static void beforeClass() throws Exception {
- initCore("solr/crazy-path-to-config.xml","solr/crazy-path-to-schema.xml");
- }
-
-
- /**
- * responseHeader has changed in SOLR-59, check old and new variants,
- * In SOLR-2413, we removed support for the deprecated versions
- */
- @Test
- public void testSOLR59responseHeaderVersions() {
- // default version is 2.2, with "new" responseHeader
- lrf.args.remove(CommonParams.VERSION);
- lrf.args.put("wt", "standard");
- assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='status'][.='0']");
- lrf.args.remove("wt");
- assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='QTime']");
-
- // and explicit 2.2 works as default
- //lrf.args.put("version", "2.2");
- lrf.args.put("wt", "standard");
- assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='status'][.='0']");
- lrf.args.remove("wt");
- assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='QTime']");
- }
-
- @Test
- public void testUselessWriter() throws Exception {
- lrf.args.put("wt", "useless");
- String out = h.query(req("foo"));
- assertEquals(USELESS_OUTPUT, out);
- }
-
- public void testLazy() {
- PluginBag.PluginHolder<QueryResponseWriter> qrw = h.getCore().getResponseWriters().getRegistry().get("useless");
- assertTrue("Should be a lazy class", qrw instanceof PluginBag.LazyPluginHolder);
-
- qrw = h.getCore().getResponseWriters().getRegistry().get("xml");
- assertTrue("Should not be a lazy class", qrw.isLoaded());
- assertTrue("Should not be a lazy class", qrw.getClass() == PluginBag.PluginHolder.class);
-
- }
-
- ////////////////////////////////////////////////////////////////////////////
- /** An output writer that doesn't do anything useful. */
-
- public static class UselessOutputWriter implements QueryResponseWriter {
-
- public UselessOutputWriter() {}
-
- @Override
- public void write(Writer writer, SolrQueryRequest request, SolrQueryResponse response)
+ /** The XML string that's output for testing purposes. */
+ public static final String USELESS_OUTPUT = "useless output";
+
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ initCore("solr/crazy-path-to-config.xml", "solr/crazy-path-to-schema.xml");
+ }
+
+ /**
+ * responseHeader has changed in SOLR-59, check old and new variants, In SOLR-2413, we removed
+ * support for the deprecated versions
+ */
+ @Test
+ public void testSOLR59responseHeaderVersions() {
+ // default version is 2.2, with "new" responseHeader
+ lrf.args.remove(CommonParams.VERSION);
+ lrf.args.put("wt", "standard");
+ assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='status'][.='0']");
+ lrf.args.remove("wt");
+ assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='QTime']");
+
+ // and explicit 2.2 works as default
+ // lrf.args.put("version", "2.2");
+ lrf.args.put("wt", "standard");
+ assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='status'][.='0']");
+ lrf.args.remove("wt");
+ assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='QTime']");
+ }
+
+ @Test
+ public void testUselessWriter() throws Exception {
+ lrf.args.put("wt", "useless");
+ String out = h.query(req("foo"));
+ assertEquals(USELESS_OUTPUT, out);
+ }
+
+ public void testLazy() {
+ PluginBag.PluginHolder<QueryResponseWriter> qrw =
+ h.getCore().getResponseWriters().getRegistry().get("useless");
+ assertTrue("Should be a lazy class", qrw instanceof PluginBag.LazyPluginHolder);
+
+ qrw = h.getCore().getResponseWriters().getRegistry().get("xml");
+ assertTrue("Should not be a lazy class", qrw.isLoaded());
+ assertTrue("Should not be a lazy class", qrw.getClass() == PluginBag.PluginHolder.class);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ /** An output writer that doesn't do anything useful. */
+ public static class UselessOutputWriter implements QueryResponseWriter {
+
+ public UselessOutputWriter() {}
+
+ @Override
+ public void write(Writer writer, SolrQueryRequest request, SolrQueryResponse response)
throws IOException {
- writer.write(USELESS_OUTPUT);
- }
-
- @Override
- public String getContentType(SolrQueryRequest request, SolrQueryResponse response) {
- return CONTENT_TYPE_TEXT_UTF8;
- }
-
+ writer.write(USELESS_OUTPUT);
}
+ @Override
+ public String getContentType(SolrQueryRequest request, SolrQueryResponse response) {
+ return CONTENT_TYPE_TEXT_UTF8;
+ }
+ }
}
diff --git a/solr/core/src/test/org/apache/solr/SampleTest.java b/solr/core/src/test/org/apache/solr/SampleTest.java
index 407a483..e542d02 100644
--- a/solr/core/src/test/org/apache/solr/SampleTest.java
+++ b/solr/core/src/test/org/apache/solr/SampleTest.java
@@ -22,99 +22,92 @@ import org.apache.solr.util.*;
import org.junit.BeforeClass;
import org.junit.Test;
-/**
- * This is an example of how to write a JUnit tests for Solr using the
- * SolrTestCaseJ4
- */
+/** This is an example of how to write a JUnit tests for Solr using the SolrTestCaseJ4 */
public class SampleTest extends SolrTestCaseJ4 {
/**
* All subclasses of SolrTestCaseJ4 should initialize the core.
*
- * <p>
- * Note that different tests can use different schemas/configs by referring
- * to any crazy path they want (as long as it works).
- * </p>
+ * <p>Note that different tests can use different schemas/configs by referring to any crazy path
+ * they want (as long as it works).
*/
@BeforeClass
public static void beforeClass() throws Exception {
- initCore("solr/crazy-path-to-config.xml","solr/crazy-path-to-schema.xml");
+ initCore("solr/crazy-path-to-config.xml", "solr/crazy-path-to-schema.xml");
}
-
- /**
- * Demonstration of some of the simple ways to use the base class
- */
+
+ /** Demonstration of some of the simple ways to use the base class */
@Test
public void testSimple() {
- lrf.args.put(CommonParams.VERSION,"2.2");
- assertU("Simple assertion that adding a document works",
- adoc("id", "4055",
- "subject", "Hoss the Hoss man Hostetter"));
+ lrf.args.put(CommonParams.VERSION, "2.2");
+ assertU(
+ "Simple assertion that adding a document works",
+ adoc(
+ "id", "4055",
+ "subject", "Hoss the Hoss man Hostetter"));
/* alternate syntax, no label */
- assertU(adoc("id", "4056",
- "subject", "Some Other Guy"));
+ assertU(
+ adoc(
+ "id", "4056",
+ "subject", "Some Other Guy"));
assertU(commit());
assertU(optimize());
- assertQ("couldn't find subject hoss",
- req("subject:Hoss")
- ,"//result[@numFound=1]"
- ,"//str[@name='id'][.='4055']"
- );
+ assertQ(
+ "couldn't find subject hoss",
+ req("subject:Hoss"),
+ "//result[@numFound=1]",
+ "//str[@name='id'][.='4055']");
}
- /**
- * Demonstration of some of the more complex ways to use the base class
- */
+ /** Demonstration of some of the more complex ways to use the base class */
@Test
public void testAdvanced() throws Exception {
- lrf.args.put(CommonParams.VERSION,"2.2");
- assertU("less common case, a complex addition with options",
- add(doc("id", "4059",
- "subject", "Who Me?"),
- "overwrite", "false"));
+ lrf.args.put(CommonParams.VERSION, "2.2");
+ assertU(
+ "less common case, a complex addition with options",
+ add(
+ doc(
+ "id", "4059",
+ "subject", "Who Me?"),
+ "overwrite",
+ "false"));
- assertU("or just make the raw XML yourself",
- "<add overwrite=\"false\">" +
- doc("id", "4059",
- "subject", "Who Me Again?") + "</add>");
+ assertU(
+ "or just make the raw XML yourself",
+ "<add overwrite=\"false\">"
+ + doc(
+ "id", "4059",
+ "subject", "Who Me Again?")
+ + "</add>");
/* or really make the xml yourself */
- assertU("<add><doc><field name=\"id\">4055</field>"
- +"<field name=\"subject\">Hoss the Hoss man Hostetter</field>"
- +"</doc></add>");
-
+ assertU(
+ "<add><doc><field name=\"id\">4055</field>"
+ + "<field name=\"subject\">Hoss the Hoss man Hostetter</field>"
+ + "</doc></add>");
+
assertU("<commit/>");
assertU("<optimize/>");
-
+
/* access the default LocalRequestFactory directly to make a request */
- SolrQueryRequest req = lrf.makeRequest( "subject:Hoss" );
- assertQ("couldn't find subject hoss",
- req
- ,"//result[@numFound=1]"
- ,"//str[@name='id'][.='4055']"
- );
+ SolrQueryRequest req = lrf.makeRequest("subject:Hoss");
+ assertQ(
+ "couldn't find subject hoss", req, "//result[@numFound=1]", "//str[@name='id'][.='4055']");
/* make your own LocalRequestFactory to build a request
*
* Note: the qt proves we are using our custom config...
*/
- TestHarness.LocalRequestFactory l = h.getRequestFactory
- ("/crazy_custom_qt",100,200,CommonParams.VERSION,"2.2");
- assertQ("how did i find Mack Daddy? ",
- l.makeRequest( "Mack Daddy" )
- ,"//result[@numFound=0]"
- );
+ TestHarness.LocalRequestFactory l =
+ h.getRequestFactory("/crazy_custom_qt", 100, 200, CommonParams.VERSION, "2.2");
+ assertQ("how did i find Mack Daddy? ", l.makeRequest("Mack Daddy"), "//result[@numFound=0]");
/* you can access the harness directly as well*/
- assertNull("how did i find Mack Daddy? ",
- h.validateQuery(l.makeRequest( "Mack Daddy" )
- ,"//result[@numFound=0]"
- ));
-
+ assertNull(
+ "how did i find Mack Daddy? ",
+ h.validateQuery(l.makeRequest("Mack Daddy"), "//result[@numFound=0]"));
}
}
-
-
diff --git a/solr/core/src/test/org/apache/solr/SolrInfoBeanTest.java b/solr/core/src/test/org/apache/solr/SolrInfoBeanTest.java
index c0a2199..a76dfae 100644
--- a/solr/core/src/test/org/apache/solr/SolrInfoBeanTest.java
+++ b/solr/core/src/test/org/apache/solr/SolrInfoBeanTest.java
@@ -16,6 +16,12 @@
*/
package org.apache.solr;
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
import org.apache.lucene.util.TestUtil;
import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.handler.admin.LukeRequestHandler;
@@ -26,26 +32,17 @@ import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricsContext;
import org.apache.solr.search.CaffeineCache;
import org.junit.BeforeClass;
-import java.io.File;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-/**
- * A simple test used to increase code coverage for some standard things...
- */
-public class SolrInfoBeanTest extends SolrTestCaseJ4
-{
+/** A simple test used to increase code coverage for some standard things... */
+public class SolrInfoBeanTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
- initCore("solrconfig.xml","schema.xml");
+ initCore("solrconfig.xml", "schema.xml");
}
/**
- * Gets a list of everything we can find in the classpath and makes sure it has
- * a name, description, etc...
+ * Gets a list of everything we can find in the classpath and makes sure it has a name,
+ * description, etc...
*/
public void testCallMBeanInfo() throws Exception {
List<Class<?>> classes = new ArrayList<>();
@@ -54,40 +51,42 @@ public class SolrInfoBeanTest extends SolrTestCaseJ4
classes.addAll(getClassesForPackage(LukeRequestHandler.class.getPackage().getName()));
classes.addAll(getClassesForPackage(DefaultSolrHighlighter.class.getPackage().getName()));
classes.addAll(getClassesForPackage(CaffeineCache.class.getPackage().getName()));
- // System.out.println(classes);
-
+ // System.out.println(classes);
+
int checked = 0;
SolrMetricManager metricManager = h.getCoreContainer().getMetricManager();
String registry = h.getCore().getCoreMetricManager().getRegistryName();
SolrMetricsContext solrMetricsContext = new SolrMetricsContext(metricManager, registry, "foo");
String scope = TestUtil.randomSimpleString(random(), 2, 10);
- for(Class<?> clazz : classes ) {
- if( SolrInfoBean.class.isAssignableFrom( clazz ) ) {
+ for (Class<?> clazz : classes) {
+ if (SolrInfoBean.class.isAssignableFrom(clazz)) {
try {
SolrInfoBean info = clazz.asSubclass(SolrInfoBean.class).getConstructor().newInstance();
info.initializeMetrics(solrMetricsContext, scope);
- //System.out.println( info.getClass() );
- assertNotNull( info.getClass().getCanonicalName(), info.getName() );
- assertNotNull( info.getClass().getCanonicalName(), info.getDescription() );
- assertNotNull( info.getClass().getCanonicalName(), info.getCategory() );
-
- if( info instanceof CaffeineCache ) {
+ // System.out.println( info.getClass() );
+ assertNotNull(info.getClass().getCanonicalName(), info.getName());
+ assertNotNull(info.getClass().getCanonicalName(), info.getDescription());
+ assertNotNull(info.getClass().getCanonicalName(), info.getCategory());
+
+ if (info instanceof CaffeineCache) {
continue;
}
-
- assertNotNull( info.toString() );
+
+ assertNotNull(info.toString());
checked++;
- }
- catch( ReflectiveOperationException ex ) {
+ } catch (ReflectiveOperationException ex) {
// expected...
- //System.out.println( "unable to initialize: "+clazz );
+ // System.out.println( "unable to initialize: "+clazz );
}
}
}
- assertTrue( "there are at least 10 SolrInfoBean that should be found in the classpath, found " + checked, checked > 10 );
+ assertTrue(
+ "there are at least 10 SolrInfoBean that should be found in the classpath, found "
+ + checked,
+ checked > 10);
}
-
+
private static List<Class<?>> getClassesForPackage(String pckgname) throws Exception {
ArrayList<File> directories = new ArrayList<>();
ClassLoader cld = h.getCore().getResourceLoader().getClassLoader();
@@ -95,29 +94,32 @@ public class SolrInfoBeanTest extends SolrTestCaseJ4
Enumeration<URL> resources = cld.getResources(path);
while (resources.hasMoreElements()) {
final URI uri = resources.nextElement().toURI();
- if (!"file".equalsIgnoreCase(uri.getScheme()))
- continue;
+ if (!"file".equalsIgnoreCase(uri.getScheme())) continue;
final File f = new File(uri);
directories.add(f);
}
-
+
ArrayList<Class<?>> classes = new ArrayList<>();
for (File directory : directories) {
if (directory.exists()) {
String[] files = directory.list();
for (String file : files) {
if (file.endsWith(".class")) {
- String clazzName = file.substring(0, file.length() - 6);
- // exclude Test classes that happen to be in these packages.
- // class.ForName'ing some of them can cause trouble.
- if (!clazzName.endsWith("Test") && !clazzName.startsWith("Test")) {
- classes.add(Class.forName(pckgname + '.' + clazzName));
- }
+ String clazzName = file.substring(0, file.length() - 6);
+ // exclude Test classes that happen to be in these packages.
+ // class.ForName'ing some of them can cause trouble.
+ if (!clazzName.endsWith("Test") && !clazzName.startsWith("Test")) {
+ classes.add(Class.forName(pckgname + '.' + clazzName));
+ }
}
}
}
}
- assertFalse("No classes found in package '"+pckgname+"'; maybe your test classes are packaged as JAR file?", classes.isEmpty());
+ assertFalse(
+ "No classes found in package '"
+ + pckgname
+ + "'; maybe your test classes are packaged as JAR file?",
+ classes.isEmpty());
return classes;
}
}
diff --git a/solr/core/src/test/org/apache/solr/SolrTestCaseJ4DeleteCoreTest.java b/solr/core/src/test/org/apache/solr/SolrTestCaseJ4DeleteCoreTest.java
index 8c344f9..3167204b 100644
--- a/solr/core/src/test/org/apache/solr/SolrTestCaseJ4DeleteCoreTest.java
+++ b/solr/core/src/test/org/apache/solr/SolrTestCaseJ4DeleteCoreTest.java
@@ -21,16 +21,13 @@ package org.apache.solr;
public class SolrTestCaseJ4DeleteCoreTest extends SolrTestCaseJ4 {
public void testDeleteCore() throws Exception {
- initCore("solrconfig.xml","schema.xml");
+ initCore("solrconfig.xml", "schema.xml");
assertU(adoc("id", "1"));
assertU(commit());
assertQ(req("q", "*:*"), "//*[@numFound='1']");
deleteCore();
- initCore("solrconfig.xml","schema.xml");
+ initCore("solrconfig.xml", "schema.xml");
assertQ(req("q", "*:*"), "//*[@numFound='0']");
}
-
-
-
}
diff --git a/solr/core/src/test/org/apache/solr/SolrTestCaseJ4Test.java b/solr/core/src/test/org/apache/solr/SolrTestCaseJ4Test.java
index fc995e3..d281eb7 100644
--- a/solr/core/src/test/org/apache/solr/SolrTestCaseJ4Test.java
+++ b/solr/core/src/test/org/apache/solr/SolrTestCaseJ4Test.java
@@ -17,34 +17,35 @@
package org.apache.solr;
import java.io.File;
-
import org.apache.commons.io.FileUtils;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-
public class SolrTestCaseJ4Test extends SolrTestCaseJ4 {
private static String tmpSolrHome;
@BeforeClass
public static void beforeClass() throws Exception {
- // Create a temporary directory that holds a core NOT named "collection1". Use the smallest configuration sets
- // we can so we don't copy that much junk around.
+ // Create a temporary directory that holds a core NOT named "collection1". Use the smallest
+ // configuration sets we can so we don't copy that much junk around.
tmpSolrHome = createTempDir().toFile().getAbsolutePath();
File subHome = new File(new File(tmpSolrHome, "core0"), "conf");
assertTrue("Failed to make subdirectory ", subHome.mkdirs());
String top = SolrTestCaseJ4.TEST_HOME() + "/collection1/conf";
FileUtils.copyFile(new File(top, "schema-tiny.xml"), new File(subHome, "schema-tiny.xml"));
- FileUtils.copyFile(new File(top, "solrconfig-minimal.xml"), new File(subHome, "solrconfig-minimal.xml"));
- FileUtils.copyFile(new File(top, "solrconfig.snippet.randomindexconfig.xml"), new File(subHome, "solrconfig.snippet.randomindexconfig.xml"));
+ FileUtils.copyFile(
+ new File(top, "solrconfig-minimal.xml"), new File(subHome, "solrconfig-minimal.xml"));
+ FileUtils.copyFile(
+ new File(top, "solrconfig.snippet.randomindexconfig.xml"),
+ new File(subHome, "solrconfig.snippet.randomindexconfig.xml"));
FileUtils.copyDirectory(new File(tmpSolrHome, "core0"), new File(tmpSolrHome, "core1"));
- // Core discovery will default to the name of the dir the core.properties file is in. So if everything else is
- // OK as defaults, just the _presence_ of this file is sufficient.
+ // Core discovery will default to the name of the dir the core.properties file is in. So if
+ // everything else is OK as defaults, just the _presence_ of this file is sufficient.
FileUtils.touch(new File(tmpSolrHome, "core0/core.properties"));
FileUtils.touch(new File(tmpSolrHome, "core1/core.properties"));
@@ -54,9 +55,7 @@ public class SolrTestCaseJ4Test extends SolrTestCaseJ4 {
}
@AfterClass
- public static void AfterClass() throws Exception {
-
- }
+ public static void AfterClass() throws Exception {}
@Test
public void testCorrectCore() throws Exception {
@@ -74,13 +73,16 @@ public class SolrTestCaseJ4Test extends SolrTestCaseJ4 {
params.add("rows", "42");
assertEquals(params.toString(), params("q", "*:*", "rows", "42").toString());
- expectThrows(RuntimeException.class, () -> {
- params("parameterWithoutValue");
- });
-
- expectThrows(RuntimeException.class, () -> {
- params("q", "*:*", "rows", "42", "parameterWithoutValue");
- });
+ expectThrows(
+ RuntimeException.class,
+ () -> {
+ params("parameterWithoutValue");
+ });
+
+ expectThrows(
+ RuntimeException.class,
+ () -> {
+ params("q", "*:*", "rows", "42", "parameterWithoutValue");
+ });
}
-
}
diff --git a/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java b/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java
index d21b5db..e819cf6 100644
--- a/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java
+++ b/solr/core/src/test/org/apache/solr/TestCrossCoreJoin.java
@@ -16,10 +16,9 @@
*/
package org.apache.solr;
+import com.google.common.collect.ImmutableMap;
import java.io.StringWriter;
import java.util.Collections;
-
-import com.google.common.collect.ImmutableMap;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.core.CoreContainer;
@@ -44,7 +43,7 @@ public class TestCrossCoreJoin extends SolrTestCaseJ4 {
public static void beforeTests() throws Exception {
System.setProperty("enable.update.log", "false"); // schema12 doesn't support _version_
System.setProperty("solr.filterCache.async", "true");
-// initCore("solrconfig.xml","schema12.xml");
+ // initCore("solrconfig.xml","schema12.xml");
// File testHome = createTempDir().toFile();
// FileUtils.copyDirectory(getFile("solrj/solr"), testHome);
@@ -53,22 +52,106 @@ public class TestCrossCoreJoin extends SolrTestCaseJ4 {
fromCore = coreContainer.create("fromCore", ImmutableMap.of("configSet", "minimal"));
- assertU(add(doc("id", "1", "id_s_dv", "1", "name", "john", "title", "Director", "dept_s", "Engineering")));
- assertU(add(doc("id", "2", "id_s_dv", "2", "name", "mark", "title", "VP", "dept_s", "Marketing")));
- assertU(add(doc("id", "3", "id_s_dv", "3", "name", "nancy", "title", "MTS", "dept_s", "Sales")));
- assertU(add(doc("id", "4", "id_s_dv", "4", "name", "dave", "title", "MTS", "dept_s", "Support", "dept_s", "Engineering")));
- assertU(add(doc("id", "5", "id_s_dv", "5", "name", "tina", "title", "VP", "dept_s", "Engineering")));
+ assertU(
+ add(
+ doc(
+ "id",
+ "1",
+ "id_s_dv",
+ "1",
+ "name",
+ "john",
+ "title",
+ "Director",
+ "dept_s",
+ "Engineering")));
+ assertU(
+ add(doc("id", "2", "id_s_dv", "2", "name", "mark", "title", "VP", "dept_s", "Marketing")));
+ assertU(
+ add(doc("id", "3", "id_s_dv", "3", "name", "nancy", "title", "MTS", "dept_s", "Sales")));
+ assertU(
+ add(
+ doc(
+ "id",
+ "4",
+ "id_s_dv",
+ "4",
+ "name",
+ "dave",
+ "title",
+ "MTS",
+ "dept_s",
+ "Support",
+ "dept_s",
+ "Engineering")));
+ assertU(
+ add(
+ doc(
+ "id",
+ "5",
+ "id_s_dv",
+ "5",
+ "name",
+ "tina",
+ "title",
+ "VP",
+ "dept_s",
+ "Engineering")));
assertU(commit());
- update(fromCore, add(doc("id", "10", "id_s_dv", "10", "dept_id_s", "Engineering", "text", "These guys develop stuff", "cat", "dev")));
- update(fromCore, add(doc("id", "11", "id_s_dv", "11", "dept_id_s", "Marketing", "text", "These guys make you look good")));
- update(fromCore, add(doc("id", "12", "id_s_dv", "12", "dept_id_s", "Sales", "text", "These guys sell stuff")));
- update(fromCore, add(doc("id", "13", "id_s_dv", "13", "dept_id_s", "Support", "text", "These guys help customers")));
+ update(
+ fromCore,
+ add(
+ doc(
+ "id",
+ "10",
+ "id_s_dv",
+ "10",
+ "dept_id_s",
+ "Engineering",
+ "text",
+ "These guys develop stuff",
+ "cat",
+ "dev")));
+ update(
+ fromCore,
+ add(
+ doc(
+ "id",
+ "11",
+ "id_s_dv",
+ "11",
+ "dept_id_s",
+ "Marketing",
+ "text",
+ "These guys make you look good")));
+ update(
+ fromCore,
+ add(
+ doc(
+ "id",
+ "12",
+ "id_s_dv",
+ "12",
+ "dept_id_s",
+ "Sales",
+ "text",
+ "These guys sell stuff")));
+ update(
+ fromCore,
+ add(
+ doc(
+ "id",
+ "13",
+ "id_s_dv",
+ "13",
+ "dept_id_s",
+ "Support",
+ "text",
+ "These guys help customers")));
update(fromCore, commit());
-
}
-
public static String update(SolrCore core, String xml) throws Exception {
DirectSolrConnection connection = new DirectSolrConnection(core);
SolrRequestHandler handler = core.getRequestHandler("/update");
@@ -86,36 +169,55 @@ public class TestCrossCoreJoin extends SolrTestCaseJ4 {
}
void doTestJoin(String joinPrefix) throws Exception {
- assertJQ(req("q", joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev", "fl", "id",
- "debugQuery", random().nextBoolean() ? "true":"false")
- , "/response=={'numFound':3,'start':0,'numFoundExact':true,'docs':[{'id':'1'},{'id':'4'},{'id':'5'}]}"
- );
-
- assertJQ(req( "qt", "/export",
- "q", joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev", "fl", "id_s_dv",
- "sort", "id_s_dv asc",
- "debugQuery", random().nextBoolean() ? "true":"false")
- , "/response=={'numFound':3,'docs':[{'id_s_dv':'1'},{'id_s_dv':'4'},{'id_s_dv':'5'}]}"
- );
+ assertJQ(
+ req(
+ "q",
+ joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev",
+ "fl",
+ "id",
+ "debugQuery",
+ random().nextBoolean() ? "true" : "false"),
+ "/response=={'numFound':3,'start':0,'numFoundExact':true,'docs':[{'id':'1'},{'id':'4'},{'id':'5'}]}");
+
+ assertJQ(
+ req(
+ "qt",
+ "/export",
+ "q",
+ joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev",
+ "fl",
+ "id_s_dv",
+ "sort",
+ "id_s_dv asc",
+ "debugQuery",
+ random().nextBoolean() ? "true" : "false"),
+ "/response=={'numFound':3,'docs':[{'id_s_dv':'1'},{'id_s_dv':'4'},{'id_s_dv':'5'}]}");
assertFalse(fromCore.isClosed());
assertFalse(h.getCore().isClosed());
// find people that develop stuff - but limit via filter query to a name of "john"
// this tests filters being pushed down to queries (SOLR-3062)
- assertJQ(req("q", joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev", "fl", "id", "fq", "name:john",
- "debugQuery", random().nextBoolean() ? "true":"false")
- , "/response=={'numFound':1,'start':0,'numFoundExact':true,'docs':[{'id':'1'}]}"
- );
+ assertJQ(
+ req(
+ "q",
+ joinPrefix + " from=dept_id_s to=dept_s fromIndex=fromCore}cat:dev",
+ "fl",
+ "id",
+ "fq",
+ "name:john",
+ "debugQuery",
+ random().nextBoolean() ? "true" : "false"),
+ "/response=={'numFound':1,'start':0,'numFoundExact':true,'docs':[{'id':'1'}]}");
}
@Test
public void testCoresAreDifferent() throws Exception {
assertQEx("schema12.xml" + " has no \"cat\" field", req("cat:*"), ErrorCode.BAD_REQUEST);
- final LocalSolrQueryRequest req = new LocalSolrQueryRequest(fromCore, "cat:*", "/select", 0, 100, Collections.emptyMap());
+ final LocalSolrQueryRequest req =
+ new LocalSolrQueryRequest(fromCore, "cat:*", "/select", 0, 100, Collections.emptyMap());
final String resp = query(fromCore, req);
assertTrue(resp, resp.contains("numFound=\"1\""));
assertTrue(resp, resp.contains("<str name=\"id\">10</str>"));
-
}
public String query(SolrCore core, SolrQueryRequest req) throws Exception {
@@ -123,7 +225,7 @@ public class TestCrossCoreJoin extends SolrTestCaseJ4 {
if (req.getParams().get("qt") != null) {
handler = req.getParams().get("qt");
}
- if (req.getParams().get("wt") == null){
+ if (req.getParams().get("wt") == null) {
ModifiableSolrParams params = new ModifiableSolrParams(req.getParams());
params.set("wt", "xml");
req.setParams(params);
diff --git a/solr/core/src/test/org/apache/solr/TestCursorMarkWithoutUniqueKey.java b/solr/core/src/test/org/apache/solr/TestCursorMarkWithoutUniqueKey.java
index a98d44f..1c0638d 100644
--- a/solr/core/src/test/org/apache/solr/TestCursorMarkWithoutUniqueKey.java
+++ b/solr/core/src/test/org/apache/solr/TestCursorMarkWithoutUniqueKey.java
@@ -16,34 +16,36 @@
*/
package org.apache.solr;
-import org.apache.solr.schema.SchemaField;
import static org.apache.solr.common.params.CursorMarkParams.CURSOR_MARK_START;
-import org.junit.Before;
+import org.apache.solr.schema.SchemaField;
import org.junit.After;
+import org.junit.Before;
-/**
- * Tests that cursor requests fail unless the IndexSchema defines a uniqueKey.
- */
+/** Tests that cursor requests fail unless the IndexSchema defines a uniqueKey. */
public class TestCursorMarkWithoutUniqueKey extends SolrTestCaseJ4 {
- public final static String TEST_SOLRCONFIG_NAME = "solrconfig-minimal.xml";
- public final static String TEST_SCHEMAXML_NAME = "schema-minimal.xml";
+ public static final String TEST_SOLRCONFIG_NAME = "solrconfig-minimal.xml";
+ public static final String TEST_SCHEMAXML_NAME = "schema-minimal.xml";
@Before
public void beforeSetupCore() throws Exception {
- System.setProperty("solr.test.useFilterForSortedQuery", Boolean.toString(random().nextBoolean()));
- System.setProperty("solr.test.useFilterForSortedQuery", Boolean.toString(random().nextBoolean()));
+ System.setProperty(
+ "solr.test.useFilterForSortedQuery", Boolean.toString(random().nextBoolean()));
+ System.setProperty(
+ "solr.test.useFilterForSortedQuery", Boolean.toString(random().nextBoolean()));
initCore(TEST_SOLRCONFIG_NAME, TEST_SCHEMAXML_NAME);
SchemaField uniqueKeyField = h.getCore().getLatestSchema().getUniqueKeyField();
- assertNull("This test requires that the schema not have a uniquekey field -- someone violated that in " + TEST_SCHEMAXML_NAME, uniqueKeyField);
+ assertNull(
+ "This test requires that the schema not have a uniquekey field -- someone violated that in "
+ + TEST_SCHEMAXML_NAME,
+ uniqueKeyField);
}
@After
public void afterDestroyCore() throws Exception {
deleteCore();
}
-
public void test() throws Exception {
@@ -51,13 +53,15 @@ public class TestCursorMarkWithoutUniqueKey extends SolrTestCaseJ4 {
assertU(commit());
try {
- ignoreException("Cursor functionality is not available unless the IndexSchema defines a uniqueKey field");
- expectThrows(RuntimeException.class,
+ ignoreException(
+ "Cursor functionality is not available unless the IndexSchema defines a uniqueKey field");
+ expectThrows(
+ RuntimeException.class,
"No exception when querying with a cursorMark with no uniqueKey defined.",
- () -> assertQ(req("q", "*:*", "sort", "fld desc", "cursorMark", CURSOR_MARK_START))
- );
+ () -> assertQ(req("q", "*:*", "sort", "fld desc", "cursorMark", CURSOR_MARK_START)));
} finally {
- unIgnoreException("Cursor functionality is not available unless the IndexSchema defines a uniqueKey field");
+ unIgnoreException(
+ "Cursor functionality is not available unless the IndexSchema defines a uniqueKey field");
}
}
}
diff --git a/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java b/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
index 868a67c..7b72646 100644
--- a/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
+++ b/solr/core/src/test/org/apache/solr/TestDistributedGrouping.java
@@ -16,10 +16,12 @@
*/
package org.apache.solr;
+import static org.hamcrest.CoreMatchers.containsString;
+
import java.io.IOException;
import java.util.List;
-
import org.apache.lucene.util.LuceneTestCase.Slow;
+import org.apache.solr.SolrTestCaseJ4.SuppressPointFields;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
@@ -29,37 +31,34 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
-import org.apache.solr.SolrTestCaseJ4.SuppressPointFields;
import org.junit.Test;
-import static org.hamcrest.CoreMatchers.containsString;
-
/**
- * TODO? perhaps use:
- * http://docs.codehaus.org/display/JETTY/ServletTester
- * rather then open a real connection?
+ * TODO? perhaps use: http://docs.codehaus.org/display/JETTY/ServletTester rather then open a real
+ * connection?
*
* @since solr 4.0
*/
@Slow
-@SuppressPointFields(bugUrl="https://issues.apache.org/jira/browse/SOLR-10844")
+@SuppressPointFields(bugUrl = "https://issues.apache.org/jira/browse/SOLR-10844")
public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
public TestDistributedGrouping() {
- // SOLR-10844: Even with points suppressed, this test breaks if we (randomize) docvalues="true" on trie fields?!?!?!!?
- System.setProperty(NUMERIC_DOCVALUES_SYSPROP,"false");
+ // SOLR-10844: Even with points suppressed, this test breaks if we (randomize) docvalues="true"
+ // on trie fields?!?!?!!?
+ System.setProperty(NUMERIC_DOCVALUES_SYSPROP, "false");
}
-
- String t1="a_t";
- String i1dv="a_idv";
- String i1="a_i1";
- String s1="a_s";
+
+ String t1 = "a_t";
+ String i1dv = "a_idv";
+ String i1 = "a_i1";
+ String s1 = "a_s";
String s1dv = "a_s_dvo";
String b1dv = "a_b_dvo";
String tlong = "other_tl1";
String tdate_a = "a_n_tdt1"; // use single-valued date field
String tdate_b = "b_n_tdt1";
- String oddField="oddField_s1";
+ String oddField = "oddField_s1";
@Test
@SuppressWarnings({"unchecked"})
@@ -70,97 +69,368 @@ public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
handle.clear();
handle.put("timestamp", SKIPVAL);
handle.put("_version_", SKIP);
- handle.put("grouped", UNORDERED); // distrib grouping doesn't guarantee order of top level group commands
+ // distrib grouping doesn't guarantee order of top level group commands
+ handle.put("grouped", UNORDERED);
// Test distributed grouping with empty indices
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "hl","true","hl.fl",t1);
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "facet", "true", "facet.field", t1);
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "stats", "true", "stats.field", i1);
- query("q", "kings", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "spellcheck", "true", "spellcheck.build", "true", "qt", "spellCheckCompRH", "df", "subject");
- query("q", "*:*", "fq", s1 + ":a", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "group.truncate", "true", "facet", "true", "facet.field", t1);
-
- indexr(id,1, i1, 100, tlong, 100, i1dv, 100, t1,"now is the time for all good men",
- tdate_a, "2010-04-20T11:00:00Z", b1dv, true,
- tdate_b, "2009-08-20T11:00:00Z", s1dv, "Trillian",
- "foo_f", 1.414f, "foo_b", "true", "foo_d", 1.414d);
- indexr(id,2, i1, 50 , tlong, 50, i1dv, 50, t1,"to come to the aid of their country.",
- tdate_a, "2010-05-02T11:00:00Z", b1dv, false,
- tdate_b, "2009-11-02T11:00:00Z");
- indexr(id,3, i1, 2, tlong, 2,t1,"how now brown cow",
- tdate_a, "2010-05-03T11:00:00Z");
- indexr(id,4, i1, -100 ,tlong, 101, i1dv, 101,
- t1,"the quick fox jumped over the lazy dog", b1dv, true, s1dv, "Zaphod",
- tdate_a, "2010-05-03T11:00:00Z",
- tdate_b, "2010-05-03T11:00:00Z");
- indexr(id,5, i1, 500, tlong, 500 , i1dv, 500,
- t1,"the quick fox jumped way over the lazy dog",
- tdate_a, "2010-05-05T11:00:00Z");
- indexr(id,6, i1, -600, tlong, 600 , i1dv, 600, t1,"humpty dumpy sat on a wall");
- indexr(id,7, i1, 123, tlong, 123 ,i1dv, 123, t1,"humpty dumpy had a great fall");
- indexr(id,8, i1, 876, tlong, 876,
- tdate_b, "2010-01-05T11:00:00Z",
- t1,"all the kings horses and all the kings men");
- indexr(id,9, i1, 7, tlong, 7, i1dv, 7, t1,"couldn't put humpty together again");
- indexr(id,10, i1, 4321, tlong, 4321, i1dv, 4321, t1,"this too shall pass");
- indexr(id,11, i1, -987, tlong, 987, i1dv, 2015,
- t1,"An eye for eye only ends up making the whole world blind.");
- indexr(id,12, i1, 379, tlong, 379, i1dv, 379,
- t1,"Great works are performed, not by strength, but by perseverance.");
-
- indexr(id, 14, "SubjectTerms_mfacet", new String[] {"mathematical models", "mathematical analysis"});
- indexr(id, 15, "SubjectTerms_mfacet", new String[] {"test 1", "test 2", "test3"});
- indexr(id, 16, "SubjectTerms_mfacet", new String[] {"test 1", "test 2", "test3"});
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "hl",
+ "true",
+ "hl.fl",
+ t1);
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "facet",
+ "true",
+ "facet.field",
+ t1);
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "stats",
+ "true",
+ "stats.field",
+ i1);
+ query(
+ "q",
+ "kings",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "spellcheck",
+ "true",
+ "spellcheck.build",
+ "true",
+ "qt",
+ "spellCheckCompRH",
+ "df",
+ "subject");
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "group.truncate",
+ "true",
+ "facet",
+ "true",
+ "facet.field",
+ t1);
+
+ indexr(
+ id,
+ 1,
+ i1,
+ 100,
+ tlong,
+ 100,
+ i1dv,
+ 100,
+ t1,
+ "now is the time for all good men",
+ tdate_a,
+ "2010-04-20T11:00:00Z",
+ b1dv,
+ true,
+ tdate_b,
+ "2009-08-20T11:00:00Z",
+ s1dv,
+ "Trillian",
+ "foo_f",
+ 1.414f,
+ "foo_b",
+ "true",
+ "foo_d",
+ 1.414d);
+ indexr(
+ id,
+ 2,
+ i1,
+ 50,
+ tlong,
+ 50,
+ i1dv,
+ 50,
+ t1,
+ "to come to the aid of their country.",
+ tdate_a,
+ "2010-05-02T11:00:00Z",
+ b1dv,
+ false,
+ tdate_b,
+ "2009-11-02T11:00:00Z");
+ indexr(id, 3, i1, 2, tlong, 2, t1, "how now brown cow", tdate_a, "2010-05-03T11:00:00Z");
+ indexr(
+ id,
+ 4,
+ i1,
+ -100,
+ tlong,
+ 101,
+ i1dv,
+ 101,
+ t1,
+ "the quick fox jumped over the lazy dog",
+ b1dv,
+ true,
+ s1dv,
+ "Zaphod",
+ tdate_a,
+ "2010-05-03T11:00:00Z",
+ tdate_b,
+ "2010-05-03T11:00:00Z");
+ indexr(
+ id,
+ 5,
+ i1,
+ 500,
+ tlong,
+ 500,
+ i1dv,
+ 500,
+ t1,
+ "the quick fox jumped way over the lazy dog",
+ tdate_a,
+ "2010-05-05T11:00:00Z");
+ indexr(id, 6, i1, -600, tlong, 600, i1dv, 600, t1, "humpty dumpy sat on a wall");
+ indexr(id, 7, i1, 123, tlong, 123, i1dv, 123, t1, "humpty dumpy had a great fall");
+ indexr(
+ id,
+ 8,
+ i1,
+ 876,
+ tlong,
+ 876,
+ tdate_b,
+ "2010-01-05T11:00:00Z",
+ t1,
+ "all the kings horses and all the kings men");
+ indexr(id, 9, i1, 7, tlong, 7, i1dv, 7, t1, "couldn't put humpty together again");
+ indexr(id, 10, i1, 4321, tlong, 4321, i1dv, 4321, t1, "this too shall pass");
+ indexr(
+ id,
+ 11,
+ i1,
+ -987,
+ tlong,
+ 987,
+ i1dv,
+ 2015,
+ t1,
+ "An eye for eye only ends up making the whole world blind.");
+ indexr(
+ id,
+ 12,
+ i1,
+ 379,
+ tlong,
+ 379,
+ i1dv,
+ 379,
+ t1,
+ "Great works are performed, not by strength, but by perseverance.");
+
+ indexr(
+ id,
+ 14,
+ "SubjectTerms_mfacet",
+ new String[] {"mathematical models", "mathematical analysis"});
+ indexr(id, 15, "SubjectTerms_mfacet", new String[] {"test 1", "test 2", "test3"});
+ indexr(id, 16, "SubjectTerms_mfacet", new String[] {"test 1", "test 2", "test3"});
String[] vals = new String[100];
- for (int i=0; i<100; i++) {
+ for (int i = 0; i < 100; i++) {
vals[i] = "test " + i;
}
indexr(id, 17, "SubjectTerms_mfacet", vals);
indexr(
- id, 18, i1, 232, tlong, 332, i1dv, 150,
- t1,"no eggs on wall, lesson learned", b1dv, true, s1dv, "dent",
- oddField, "odd man out"
- );
+ id,
+ 18,
+ i1,
+ 232,
+ tlong,
+ 332,
+ i1dv,
+ 150,
+ t1,
+ "no eggs on wall, lesson learned",
+ b1dv,
+ true,
+ s1dv,
+ "dent",
+ oddField,
+ "odd man out");
indexr(
- id, 19, i1, 232, tlong, 432, i1dv, 300,
- t1, "many eggs on wall", b1dv, false, s1dv, "dent",
- oddField, "odd man in"
- );
+ id,
+ 19,
+ i1,
+ 232,
+ tlong,
+ 432,
+ i1dv,
+ 300,
+ t1,
+ "many eggs on wall",
+ b1dv,
+ false,
+ s1dv,
+ "dent",
+ oddField,
+ "odd man in");
indexr(
- id, 20, i1, 232, tlong, 532, i1dv, 150,
- t1, "some eggs on wall", b1dv, false, s1dv, "author",
- oddField, "odd man between"
- );
+ id,
+ 20,
+ i1,
+ 232,
+ tlong,
+ 532,
+ i1dv,
+ 150,
+ t1,
+ "some eggs on wall",
+ b1dv,
+ false,
+ s1dv,
+ "author",
+ oddField,
+ "odd man between");
indexr(
- id, 21, i1, 232, tlong, 632, i1dv, 120,
- t1, "a few eggs on wall", b1dv, true, s1dv, "ford prefect",
- oddField, "odd man under"
- );
+ id,
+ 21,
+ i1,
+ 232,
+ tlong,
+ 632,
+ i1dv,
+ 120,
+ t1,
+ "a few eggs on wall",
+ b1dv,
+ true,
+ s1dv,
+ "ford prefect",
+ oddField,
+ "odd man under");
indexr(
- id, 22, i1, 232, tlong, 732, i1dv, 120,
- t1, "any eggs on wall", b1dv, false, s1dv, "ford prefect",
- oddField, "odd man above"
- );
+ id,
+ 22,
+ i1,
+ 232,
+ tlong,
+ 732,
+ i1dv,
+ 120,
+ t1,
+ "any eggs on wall",
+ b1dv,
+ false,
+ s1dv,
+ "ford prefect",
+ oddField,
+ "odd man above");
indexr(
- id, 23, i1, 233, tlong, 734, i1dv, 120,
- t1, "dirty eggs", b1dv, true, s1dv, "Marvin",
- oddField, "odd eggs"
- );
+ id,
+ 23,
+ i1,
+ 233,
+ tlong,
+ 734,
+ i1dv,
+ 120,
+ t1,
+ "dirty eggs",
+ b1dv,
+ true,
+ s1dv,
+ "Marvin",
+ oddField,
+ "odd eggs");
for (int i = 100; i < 150; i++) {
indexr(id, i);
}
- int[] values = new int[]{9999, 99999, 999999, 9999999};
+ int[] values = new int[] {9999, 99999, 999999, 9999999};
for (int shard = 0; shard < clients.size(); shard++) {
int groupValue = values[shard];
for (int i = 500; i < 600; i++) {
- index_specific(shard,
- i1, groupValue,
- s1, "a",
- id, i * (shard + 1),
- t1, random().nextInt(7));
+ index_specific(
+ shard, i1, groupValue, s1, "a", id, i * (shard + 1), t1, random().nextInt(7));
}
}
@@ -169,148 +439,857 @@ public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
// test grouping
// The second sort = id asc . The sorting behaviour is different in dist mode. See TopDocs#merge
// The shard the result came from matters in the order if both document sortvalues are equal
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 0, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", "id asc, _docid_ asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", "{!func}add(" + i1 + ",5) asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "facet", "true", "facet.field", t1);
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "stats", "true", "stats.field", tlong);
- query("q", "kings", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "spellcheck", "true", "spellcheck.build", "true", "qt", "spellCheckCompRH", "df", "subject");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "facet", "true", "hl","true","hl.fl",t1);
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "group.sort", "id desc");
-
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.offset", 5, "group.limit", -1, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "offset", 5, "rows", 5, "group.offset", 5, "group.limit", -1, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "offset", 5, "rows", 5, "sort", i1 + " asc, id asc", "group.format", "simple");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "offset", 5, "rows", 5, "sort", i1 + " asc, id asc", "group.main", "true");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.offset", 5, "group.limit", 5, "sort", i1 + " asc, id asc", "group.format", "simple", "offset", 5, "rows", 5);
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.offset", 5, "group.limit", 5, "sort", i1 + " asc, id asc", "group.main", "true", "offset", 5, "rows", 5);
-
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", -1, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", 10, "sort", i1 + " asc, id asc");
-
- query("q", "*:*", "fl", "id," + i1dv, "group", "true", "group.field", i1dv, "group.limit", 10, "sort", i1 + " asc, id asc");
-
-
- // SOLR-4150: what if group.query has no matches,
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 0,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ "id asc, _docid_ asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ "{!func}add(" + i1 + ",5) asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "facet",
+ "true",
+ "facet.field",
+ t1);
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "stats",
+ "true",
+ "stats.field",
+ tlong);
+ query(
+ "q",
+ "kings",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "spellcheck",
+ "true",
+ "spellcheck.build",
+ "true",
+ "qt",
+ "spellCheckCompRH",
+ "df",
+ "subject");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "facet",
+ "true",
+ "hl",
+ "true",
+ "hl.fl",
+ t1);
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "group.sort",
+ "id desc");
+
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.offset",
+ 5,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "offset",
+ 5,
+ "rows",
+ 5,
+ "group.offset",
+ 5,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "offset",
+ 5,
+ "rows",
+ 5,
+ "sort",
+ i1 + " asc, id asc",
+ "group.format",
+ "simple");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "offset",
+ 5,
+ "rows",
+ 5,
+ "sort",
+ i1 + " asc, id asc",
+ "group.main",
+ "true");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.offset",
+ 5,
+ "group.limit",
+ 5,
+ "sort",
+ i1 + " asc, id asc",
+ "group.format",
+ "simple",
+ "offset",
+ 5,
+ "rows",
+ 5);
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.offset",
+ 5,
+ "group.limit",
+ 5,
+ "sort",
+ i1 + " asc, id asc",
+ "group.main",
+ "true",
+ "offset",
+ 5,
+ "rows",
+ 5);
+
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc");
+
+ query(
+ "q",
+ "*:*",
+ "fl",
+ "id," + i1dv,
+ "group",
+ "true",
+ "group.field",
+ i1dv,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc");
+
+ // SOLR-4150: what if group.query has no matches,
// or only matches on one shard
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs",
- "group.query", "id:5", // single doc, so only one shard will have it
- "group.limit", -1, "sort", i1 + " asc, id asc");
- query("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs",
- "group.query", t1 + ":this_will_never_match",
- "group.limit", 10, "sort", i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.query",
+ "id:5", // single doc, so only one shard will have it
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.query",
+ t1 + ":this_will_never_match",
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc");
// SOLR-4164: main query matches nothing, or only matches on one shard
- query("q", "bogus_s:nothing", // no docs match
- "group", "true",
- "group.query", t1 + ":this_will_never_match",
- "group.field", i1,
- "fl", "id", "group.limit", "2", "group.format", "simple");
- query("q", "id:5", // one doc matches, so only one shard
- "rows", 100, "fl", "id," + i1, "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs",
- "group.field", i1,
- "group.limit", 10, "sort", i1 + " asc, id asc");
+ query(
+ "q",
+ "bogus_s:nothing", // no docs match
+ "group",
+ "true",
+ "group.query",
+ t1 + ":this_will_never_match",
+ "group.field",
+ i1,
+ "fl",
+ "id",
+ "group.limit",
+ "2",
+ "group.format",
+ "simple");
+ query(
+ "q",
+ "id:5", // one doc matches, so only one shard
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc");
// SOLR-13404
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs",
- "fl", "id", "group.format", "grouped", "group.limit", "2", "group.offset", "2",
- "sort", i1 + " asc, id asc");
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs",
- "fl", "id", "group.format", "grouped", "group.limit", "-12",
- "sort", i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "fl",
+ "id",
+ "group.format",
+ "grouped",
+ "group.limit",
+ "2",
+ "group.offset",
+ "2",
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "fl",
+ "id",
+ "group.format",
+ "grouped",
+ "group.limit",
+ "-12",
+ "sort",
+ i1 + " asc, id asc");
ignoreException("'group.offset' parameter cannot be negative");
- SolrException exception = expectThrows(SolrException.class, () -> query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.offset", "-1")
- );
+ SolrException exception =
+ expectThrows(
+ SolrException.class,
+ () ->
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.offset",
+ "-1"));
assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, exception.code());
- assertThat(exception.getMessage(), containsString("'group.offset' parameter cannot be negative"));
+ assertThat(
+ exception.getMessage(), containsString("'group.offset' parameter cannot be negative"));
resetExceptionIgnores();
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", "3",
- "fl", "id", "group.format", "simple", "sort", i1 + " asc, id asc");
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs",
- "fl", "id", "group.main", "true", "sort", i1 + " asc, id asc");
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs", "rows", "13", "start", "2",
- "fl", "id", "group.main", "true", "sort", i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.limit",
+ "3",
+ "fl",
+ "id",
+ "group.format",
+ "simple",
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "fl",
+ "id",
+ "group.main",
+ "true",
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "rows",
+ "13",
+ "start",
+ "2",
+ "fl",
+ "id",
+ "group.main",
+ "true",
+ "sort",
+ i1 + " asc, id asc");
// SOLR-9802
- query("q", "*:*", "group", "true", "group.field", tdate_a, "sort", i1 + " asc, id asc", "fl", "id");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.field",
+ tdate_a,
+ "sort",
+ i1 + " asc, id asc",
+ "fl",
+ "id");
// SOLR-3109
- query("q", t1 + ":eggs", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", tlong + " asc, id asc");
- query("q", i1 + ":232", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", tlong + " asc, id asc");
+ query(
+ "q",
+ t1 + ":eggs",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "sort",
+ tlong + " asc, id asc");
+ query(
+ "q",
+ i1 + ":232",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "sort",
+ tlong + " asc, id asc");
// SOLR-12248
- query("q", "*:*", "rows", 100, "fl", "id," + s1dv, "group", "true", "group.field", s1dv, "group.limit", -1, "sort", b1dv + " asc, id asc", "group.sort", "id desc");
- query("q", "*:*", "fl", "id," + b1dv, "group", "true", "group.field", b1dv, "group.limit", 10, "sort", s1dv + " asc, id asc");
- query("q", s1dv + ":dent", "fl", "id," + b1dv, "group", "true", "group.field", b1dv, "group.limit", 10, "sort", i1 + " asc, id asc");
-
- // In order to validate this we need to make sure that during indexing that all documents of one group only occur on the same shard
- query("q", "*:*", "fq", s1 + ":a", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", i1 + " asc, id asc", "group.ngroups", "true");
- query("q", "*:*", "fq", s1 + ":a", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", i1 + " asc, id asc", "group.truncate", "true");
- query("q", "*:*", "fq", s1 + ":a", "rows", 100, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", 10, "sort", i1 + " asc, id asc", "group.truncate", "true", "facet", "true", "facet.field", t1);
- for (String gfacet : new String[] { "true", "false" }) {
- for (String flimit : new String[] { "-100","-1", "1", "2", "10000" }) {
- for (String foffset : new String[] { "0","1", "2", "1000" }) {
- query("q", "*:*", "fq", s1+":a",
- "rows", 100, "fl", "id,"+i1, "sort", i1+" asc, id asc",
- "group", "true", "group.field", i1, "group.limit", 10,
- "facet", "true", "facet.field", t1, "group.facet", gfacet,
- "facet.limit", flimit, "facet.offset", foffset);
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + s1dv,
+ "group",
+ "true",
+ "group.field",
+ s1dv,
+ "group.limit",
+ -1,
+ "sort",
+ b1dv + " asc, id asc",
+ "group.sort",
+ "id desc");
+ query(
+ "q",
+ "*:*",
+ "fl",
+ "id," + b1dv,
+ "group",
+ "true",
+ "group.field",
+ b1dv,
+ "group.limit",
+ 10,
+ "sort",
+ s1dv + " asc, id asc");
+ query(
+ "q",
+ s1dv + ":dent",
+ "fl",
+ "id," + b1dv,
+ "group",
+ "true",
+ "group.field",
+ b1dv,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc");
+
+ // In order to validate this we need to make sure that during indexing that all documents of one
+ // group only occur on the same shard
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc",
+ "group.ngroups",
+ "true");
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc",
+ "group.truncate",
+ "true");
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc",
+ "group.truncate",
+ "true",
+ "facet",
+ "true",
+ "facet.field",
+ t1);
+ for (String gfacet : new String[] {"true", "false"}) {
+ for (String flimit : new String[] {"-100", "-1", "1", "2", "10000"}) {
+ for (String foffset : new String[] {"0", "1", "2", "1000"}) {
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "sort",
+ i1 + " asc, id asc",
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ 10,
+ "facet",
+ "true",
+ "facet.field",
+ t1,
+ "group.facet",
+ gfacet,
+ "facet.limit",
+ flimit,
+ "facet.offset",
+ foffset);
}
}
}
// SOLR-3316
- query("q", "*:*", "fq", s1 + ":a", "rows", 0, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "facet", "true", "facet.field", t1);
- query("q", "*:*", "fq", s1 + ":a", "rows", 0, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc", "group.truncate", "true", "facet", "true", "facet.field", t1);
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 0,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "facet",
+ "true",
+ "facet.field",
+ t1);
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 0,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc",
+ "group.truncate",
+ "true",
+ "facet",
+ "true",
+ "facet.field",
+ t1);
// SOLR-3436
- query("q", "*:*", "fq", s1 + ":a", "fl", "id," + i1, "group", "true", "group.field", i1, "sort", i1 + " asc, id asc", "group.ngroups", "true");
- query("q", "*:*", "fq", s1 + ":a", "rows", 0, "fl", "id," + i1, "group", "true", "group.field", i1, "sort", i1 + " asc, id asc", "group.ngroups", "true");
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "sort",
+ i1 + " asc, id asc",
+ "group.ngroups",
+ "true");
+ query(
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 0,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "sort",
+ i1 + " asc, id asc",
+ "group.ngroups",
+ "true");
// SOLR-15273: if id was renamed we need to use the new name
- query("q", "*:*", "rows", 100, "fl", "aliasId:id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "aliasId:id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " asc, id asc");
// SOLR-3960 - include a postfilter
- for (String facet : new String[] { "false", "true"}) {
- for (String fcache : new String[] { "", " cache=false cost=200"}) {
- query("q", "*:*", "rows", 100, "fl", "id," + i1,
- "group.limit", 10, "sort", i1 + " asc, id asc",
- "group", "true", "group.field", i1,
- "fq", "{!frange l=50 "+fcache+"}"+tlong,
- "facet.field", t1,
- "facet", facet
- );
+ for (String facet : new String[] {"false", "true"}) {
+ for (String fcache : new String[] {"", " cache=false cost=200"}) {
+ query(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group.limit",
+ 10,
+ "sort",
+ i1 + " asc, id asc",
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "fq",
+ "{!frange l=50 " + fcache + "}" + tlong,
+ "facet.field",
+ t1,
+ "facet",
+ facet);
}
}
// SOLR-6156: timeAllowed with rows>0 and rows==0
- for (String ngroups : new String[] { "false", "true" }) {
- for (String rows : new String[] { "10", "0" }) {
- simpleQuery("q", "*:*", "group", "true", "group.field", i1, "group.ngroups", ngroups, "rows", rows);
- simpleQuery("q", "*:*", "group", "true", "group.field", i1, "group.ngroups", ngroups, "rows", rows, "timeAllowed", "123456");
+ for (String ngroups : new String[] {"false", "true"}) {
+ for (String rows : new String[] {"10", "0"}) {
+ simpleQuery(
+ "q", "*:*", "group", "true", "group.field", i1, "group.ngroups", ngroups, "rows", rows);
+ simpleQuery(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.ngroups",
+ ngroups,
+ "rows",
+ rows,
+ "timeAllowed",
+ "123456");
}
}
ModifiableSolrParams params = new ModifiableSolrParams();
- Object[] q = {"q", "*:*", "fq", s1 + ":a", "rows", 1, "fl", "id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "group.ngroups", "true"};
+ Object[] q = {
+ "q",
+ "*:*",
+ "fq",
+ s1 + ":a",
+ "rows",
+ 1,
+ "fl",
+ "id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "group.ngroups",
+ "true"
+ };
for (int i = 0; i < q.length; i += 2) {
params.add(q[i].toString(), q[i + 1].toString());
@@ -328,131 +1307,351 @@ public class TestDistributedGrouping extends BaseDistributedSearchTestCase {
assertEquals(100 * shardsArr.length, matches);
assertEquals(shardsArr.length, groupCount);
-
// We validate distributed grouping with scoring as first sort.
- // note: this 'q' matches all docs and returns the 'id' as the score, which is unique and so our results should be deterministic.
- handle.put("maxScore", SKIP);// TODO see SOLR-6612
- query("q", "{!func}id_i1", "rows", 100, "fl", "score,id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", i1 + " desc", "group.sort", "score desc"); // SOLR-2955
- query("q", "{!func}id_i1", "rows", 100, "fl", "score,id," + i1, "group", "true", "group.field", i1, "group.limit", -1, "sort", "score desc, _docid_ asc, id asc");
- query("q", "{!func}id_i1", "rows", 100, "fl", "score,id," + i1, "group", "true", "group.field", i1, "group.limit", -1);
-
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", "3",
- "fl", "id,score", "sort", i1 + " asc, id asc");
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", "3",
- "fl", "id,score", "group.format", "simple", "sort", i1 + " asc, id asc");
- query("q", "*:*",
- "group", "true",
- "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", "3",
- "fl", "id,score", "group.main", "true", "sort", i1 + " asc, id asc");
-
- // grouping shouldn't care if there are multiple fl params, or what order the fl field names are in
- variantQuery(params("q", "*:*",
- "group", "true", "group.field", i1dv, "group.limit", "10",
- "sort", i1 + " asc, id asc")
- , params("fl", "id," + i1dv)
- , params("fl", i1dv + ",id")
- , params("fl", "id", "fl", i1dv)
- , params("fl", i1dv, "fl", "id")
- );
- variantQuery(params("q", "*:*", "rows", "100",
- "group", "true", "group.field", s1dv, "group.limit", "-1",
- "sort", b1dv + " asc, id asc",
- "group.sort", "id desc")
- , params("fl", "id," + s1dv + "," + tdate_a)
- , params("fl", "id", "fl", s1dv, "fl", tdate_a)
- , params("fl", tdate_a, "fl", s1dv, "fl", "id")
- );
- variantQuery(params("q", "*:*", "rows", "100",
- "group", "true", "group.field", s1dv, "group.limit", "-1",
- "sort", b1dv + " asc, id asc",
- "group.sort", "id desc")
- , params("fl", s1dv + "," + tdate_a)
- , params("fl", s1dv, "fl", tdate_a)
- , params("fl", tdate_a, "fl", s1dv)
- );
- variantQuery(params("q", "{!func}id_i1", "rows", "100",
- "group", "true", "group.field", i1, "group.limit", "-1",
- "sort", tlong+" asc, id desc")
- , params("fl", t1 + ",score," + i1dv)
- , params("fl", t1, "fl", "score", "fl", i1dv)
- , params("fl", "score", "fl", t1, "fl", i1dv)
- );
-
+ // note: this 'q' matches all docs and returns the 'id' as the score, which is unique and so our
+ // results should be deterministic.
+ handle.put("maxScore", SKIP); // TODO see SOLR-6612
+ query(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ 100,
+ "fl",
+ "score,id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ i1 + " desc",
+ "group.sort",
+ "score desc"); // SOLR-2955
+ query(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ 100,
+ "fl",
+ "score,id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ "score desc, _docid_ asc, id asc");
+ query(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ 100,
+ "fl",
+ "score,id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1);
+
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.limit",
+ "3",
+ "fl",
+ "id,score",
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.limit",
+ "3",
+ "fl",
+ "id,score",
+ "group.format",
+ "simple",
+ "sort",
+ i1 + " asc, id asc");
+ query(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.query",
+ t1 + ":kings OR " + t1 + ":eggs",
+ "group.limit",
+ "3",
+ "fl",
+ "id,score",
+ "group.main",
+ "true",
+ "sort",
+ i1 + " asc, id asc");
+
+ // grouping shouldn't care if there are multiple fl params, or what order the fl field names are
+ // in
+ variantQuery(
+ params(
+ "q",
+ "*:*",
+ "group",
+ "true",
+ "group.field",
+ i1dv,
+ "group.limit",
+ "10",
+ "sort",
+ i1 + " asc, id asc"),
+ params("fl", "id," + i1dv),
+ params("fl", i1dv + ",id"),
+ params("fl", "id", "fl", i1dv),
+ params("fl", i1dv, "fl", "id"));
+ variantQuery(
+ params(
+ "q",
+ "*:*",
+ "rows",
+ "100",
+ "group",
+ "true",
+ "group.field",
+ s1dv,
+ "group.limit",
+ "-1",
+ "sort",
+ b1dv + " asc, id asc",
+ "group.sort",
+ "id desc"),
+ params("fl", "id," + s1dv + "," + tdate_a),
+ params("fl", "id", "fl", s1dv, "fl", tdate_a),
+ params("fl", tdate_a, "fl", s1dv, "fl", "id"));
+ variantQuery(
+ params(
+ "q",
+ "*:*",
+ "rows",
+ "100",
+ "group",
+ "true",
+ "group.field",
+ s1dv,
+ "group.limit",
+ "-1",
+ "sort",
+ b1dv + " asc, id asc",
+ "group.sort",
+ "id desc"),
+ params("fl", s1dv + "," + tdate_a),
+ params("fl", s1dv, "fl", tdate_a),
+ params("fl", tdate_a, "fl", s1dv));
+ variantQuery(
+ params(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ "100",
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ "-1",
+ "sort",
+ tlong + " asc, id desc"),
+ params("fl", t1 + ",score," + i1dv),
+ params("fl", t1, "fl", "score", "fl", i1dv),
+ params("fl", "score", "fl", t1, "fl", i1dv));
+
// some explicit checks of non default sorting, and sort/group.sort with diff clauses
- query("q", "{!func}id_i1", "rows", 100, "fl", tlong + ",id," + i1, "group", "true",
- "group.field", i1, "group.limit", -1,
- "sort", tlong+" asc, id desc");
- query("q", "{!func}id_i1", "rows", 100, "fl", tlong + ",id," + i1, "group", "true",
- "group.field", i1, "group.limit", -1,
- "sort", "id asc",
- "group.sort", tlong+" asc, id desc");
- query("q", "{!func}id_i1", "rows", 100, "fl", tlong + ",id," + i1, "group", "true",
- "group.field", i1, "group.limit", -1,
- "sort", tlong+" asc, id desc",
- "group.sort", "id asc");
+ query(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ 100,
+ "fl",
+ tlong + ",id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ tlong + " asc, id desc");
+ query(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ 100,
+ "fl",
+ tlong + ",id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ "id asc",
+ "group.sort",
+ tlong + " asc, id desc");
+ query(
+ "q",
+ "{!func}id_i1",
+ "rows",
+ 100,
+ "fl",
+ tlong + ",id," + i1,
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ -1,
+ "sort",
+ tlong + " asc, id desc",
+ "group.sort",
+ "id asc");
for (boolean withFL : new boolean[] {true, false}) {
if (withFL) {
- rsp = variantQuery(params("q", "{!func}id_i1", "fq", oddField+":[* TO *]",
- "rows", "100",
- "group", "true", "group.field", i1, "group.limit", "-1",
- "sort", tlong+" asc", "group.sort", oddField+" asc")
- , params("fl", tlong + ",id," + i1)
- , params("fl", tlong, "fl", "id", "fl", i1)
- , params("fl", "id", "fl", i1, "fl", tlong)
- );
+ rsp =
+ variantQuery(
+ params(
+ "q",
+ "{!func}id_i1",
+ "fq",
+ oddField + ":[* TO *]",
+ "rows",
+ "100",
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ "-1",
+ "sort",
+ tlong + " asc",
+ "group.sort",
+ oddField + " asc"),
+ params("fl", tlong + ",id," + i1),
+ params("fl", tlong, "fl", "id", "fl", i1),
+ params("fl", "id", "fl", i1, "fl", tlong));
} else {
// special check: same query, but empty fl...
- rsp = query("q", "{!func}id_i1", "fq", oddField+":[* TO *]",
- "rows", "100",
- "group", "true", "group.field", i1, "group.limit", "-1",
- "sort", tlong+" asc", "group.sort", oddField+" asc");
+ rsp =
+ query(
+ "q",
+ "{!func}id_i1",
+ "fq",
+ oddField + ":[* TO *]",
+ "rows",
+ "100",
+ "group",
+ "true",
+ "group.field",
+ i1,
+ "group.limit",
+ "-1",
+ "sort",
+ tlong + " asc",
+ "group.sort",
+ oddField + " asc");
}
nl = (NamedList<?>) rsp.getResponse().get("grouped");
nl = (NamedList<?>) nl.get(i1);
assertEquals(rsp.toString(), 6, nl.get("matches"));
- assertEquals(rsp.toString(), 2, ((List<NamedList<?>>)nl.get("groups")).size());
- nl = ((List<NamedList<?>>)nl.get("groups")).get(0);
+ assertEquals(rsp.toString(), 2, ((List<NamedList<?>>) nl.get("groups")).size());
+ nl = ((List<NamedList<?>>) nl.get("groups")).get(0);
assertEquals(rsp.toString(), 232, nl.get("groupValue"));
SolrDocumentList docs = (SolrDocumentList) nl.get("doclist");
assertEquals(docs.toString(), 5, docs.getNumFound());
//
assertEquals(docs.toString(), "22", docs.get(0).getFirstValue("id"));
assertEquals(docs.toString(), 732L, docs.get(0).getFirstValue(tlong));
- assertEquals(docs.toString(), 232, docs.get(0).getFirstValue(i1));
+ assertEquals(docs.toString(), 232, docs.get(0).getFirstValue(i1));
//
assertEquals(docs.toString(), "21", docs.get(4).getFirstValue("id"));
assertEquals(docs.toString(), 632L, docs.get(4).getFirstValue(tlong));
- assertEquals(docs.toString(), 232, docs.get(4).getFirstValue(i1));
+ assertEquals(docs.toString(), 232, docs.get(4).getFirstValue(i1));
//
if (withFL == false) {
- // exact number varies based on test randomization, but there should always be at least the 8
- // explicitly indexed in these 2 docs...
+ // exact number varies based on test randomization, but there should always be at least the
+ // 8 explicitly indexed in these 2 docs...
assertTrue(docs.toString(), 8 <= docs.get(0).getFieldNames().size());
assertTrue(docs.toString(), 8 <= docs.get(4).getFieldNames().size());
}
}
-
+
// grouping on boolean non-stored docValued enabled field
- rsp = query("q", b1dv + ":*", "fl", "id," + b1dv, "group", "true", "group.field",
- b1dv, "group.limit", 10, "sort", b1dv + " asc, id asc");
+ rsp =
+ query(
+ "q",
+ b1dv + ":*",
+ "fl",
+ "id," + b1dv,
+ "group",
+ "true",
+ "group.field",
+ b1dv,
+ "group.limit",
+ 10,
+ "sort",
+ b1dv + " asc, id asc");
nl = (NamedList<?>) rsp.getResponse().get("grouped");
nl = (NamedList<?>) nl.get(b1dv);
assertEquals(rsp.toString(), 9, nl.get("matches"));
- assertEquals(rsp.toString(), 2, ((List<NamedList<?>>)nl.get("groups")).size());
- nl = ((List<NamedList<?>>)nl.get("groups")).get(0);
+ assertEquals(rsp.toString(), 2, ((List<NamedList<?>>) nl.get("groups")).size());
+ nl = ((List<NamedList<?>>) nl.get("groups")).get(0);
assertEquals(rsp.toString(), false, nl.get("groupValue"));
SolrDocumentList docs = (SolrDocumentList) nl.get("doclist");
assertEquals(docs.toString(), 4, docs.getNumFound());
-
+
// Can't validate the response, but can check if no errors occur.
- simpleQuery("q", "*:*", "rows", 100, "fl", "id," + i1, "group", "true", "group.query", t1 + ":kings OR " + t1 + ":eggs", "group.limit", 10, "sort", i1 + " asc, id asc", CommonParams.TIME_ALLOWED, 1);
-
- //Debug
- simpleQuery("q", "*:*", "rows", 10, "fl", "id," + i1, "group", "true", "group.field", i1, "debug", "true");
+ simpleQuery(
+ "q",
+ "*:*",
+ "rows",
+ 100,
+ "fl",
+ "id," + i1,
+ "group",
... 322353 lines suppressed ...