You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kr...@apache.org on 2017/01/06 21:47:45 UTC

[25/25] lucene-solr:jira/solr-8593: Merge branch 'apache-https-master' into jira/solr-8593

Merge branch 'apache-https-master' into jira/solr-8593


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/3793eb5e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/3793eb5e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/3793eb5e

Branch: refs/heads/jira/solr-8593
Commit: 3793eb5ec637f110e1be2acb94169be16ef549cc
Parents: 5f65487 cd4f908
Author: Kevin Risden <kr...@apache.org>
Authored: Fri Jan 6 15:47:02 2017 -0600
Committer: Kevin Risden <kr...@apache.org>
Committed: Fri Jan 6 15:47:02 2017 -0600

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  40 +-
 solr/contrib/ltr/README.md                      | 390 +------------------
 solr/contrib/ltr/example/README.md              |  60 +++
 solr/contrib/ltr/example/config.json            |  13 +-
 solr/contrib/ltr/example/exampleFeatures.json   |  26 ++
 solr/contrib/ltr/example/libsvm_formatter.py    |  12 +-
 .../ltr/example/techproducts-features.json      |  26 --
 .../contrib/ltr/example/techproducts-model.json |  18 -
 .../ltr/example/train_and_upload_demo_model.py  | 143 ++++---
 .../ltr/store/rest/ManagedFeatureStore.java     |   3 -
 .../solr/ltr/store/rest/ManagedModelStore.java  |   6 +-
 .../multipleadditivetreesmodel.json             |   2 +-
 .../org/apache/solr/ltr/TestRerankBase.java     |   9 +-
 .../model/TestMultipleAdditiveTreesModel.java   |   9 +-
 .../solr/ltr/store/rest/TestModelManager.java   |  47 ++-
 .../store/rest/TestModelManagerPersistence.java |   4 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java |  31 +-
 .../java/org/apache/solr/cloud/rule/Rule.java   |   4 +-
 .../org/apache/solr/core/CoreContainer.java     |   5 +-
 .../solr/core/MetricsDirectoryFactory.java      |   6 +-
 .../src/java/org/apache/solr/core/SolrCore.java |  20 +
 .../org/apache/solr/core/SolrInfoMBean.java     |   4 +-
 .../org/apache/solr/handler/GraphHandler.java   |   3 +-
 .../apache/solr/handler/ReplicationHandler.java |  20 +-
 .../apache/solr/handler/RequestHandlerBase.java |   5 +-
 .../org/apache/solr/handler/StreamHandler.java  |   1 +
 .../solr/handler/admin/CoreAdminHandler.java    |   6 +-
 .../solr/handler/admin/MetricsHandler.java      |  16 +-
 .../component/HttpShardHandlerFactory.java      |  50 +--
 .../org/apache/solr/handler/sql/SolrSchema.java |   8 +-
 .../solr/metrics/SolrCoreMetricManager.java     |   9 +-
 .../apache/solr/metrics/SolrMetricProducer.java |  12 +-
 .../apache/solr/parser/SolrQueryParserBase.java |  26 +-
 .../request/PerSegmentSingleValuedFaceting.java |   9 +-
 .../org/apache/solr/request/SimpleFacets.java   |  37 +-
 .../solr/search/ComplexPhraseQParserPlugin.java |  70 +++-
 .../org/apache/solr/search/facet/HLLAgg.java    |  13 +-
 .../apache/solr/search/facet/PercentileAgg.java |   7 +-
 .../org/apache/solr/search/facet/SlotAcc.java   |   5 +-
 .../apache/solr/search/facet/UniqueSlotAcc.java |   2 +-
 .../java/org/apache/solr/update/PeerSync.java   |   8 +-
 .../apache/solr/update/UpdateShardHandler.java  |  21 +-
 .../stats/InstrumentedHttpRequestExecutor.java  |  48 +--
 ...entedPoolingHttpClientConnectionManager.java |  43 +-
 .../org/apache/solr/util/stats/MetricUtils.java |  13 +-
 .../apache/solr/cloud/rule/RuleEngineTest.java  |   2 +-
 .../solr/handler/admin/MetricsHandlerTest.java  |  36 +-
 .../solr/metrics/SolrCoreMetricManagerTest.java |   7 +-
 .../solr/metrics/SolrMetricTestUtils.java       |  47 +--
 .../apache/solr/request/SimpleFacetsTest.java   |  12 +-
 .../TestComplexPhraseLeadingWildcard.java       | 113 ++++++
 .../solr/search/facet/TestJsonFacets.java       |  71 +++-
 .../client/solrj/io/ops/BooleanOperation.java   |   6 +-
 .../solr/client/solrj/io/ops/LeafOperation.java |   8 +
 .../client/solrj/io/stream/HavingStream.java    |  21 +-
 .../solrj/io/stream/expr/StreamFactory.java     |   2 +
 .../solrj/io/stream/StreamExpressionTest.java   |  36 +-
 .../java/org/apache/solr/SolrTestCaseHS.java    |   4 +
 58 files changed, 779 insertions(+), 896 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3793eb5e/solr/core/src/java/org/apache/solr/handler/sql/SolrSchema.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/sql/SolrSchema.java
index 221ddf8,0000000..aecfd42
mode 100644,000000..100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrSchema.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrSchema.java
@@@ -1,120 -1,0 +1,124 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.solr.handler.sql;
 +
 +import com.google.common.collect.ImmutableMap;
 +import org.apache.calcite.rel.type.*;
 +import org.apache.calcite.schema.Table;
 +import org.apache.calcite.schema.impl.AbstractSchema;
 +import org.apache.calcite.sql.type.SqlTypeFactoryImpl;
 +import org.apache.solr.client.solrj.SolrServerException;
 +import org.apache.solr.client.solrj.impl.CloudSolrClient;
 +import org.apache.solr.client.solrj.request.LukeRequest;
 +import org.apache.solr.client.solrj.response.LukeResponse;
++import org.apache.solr.common.cloud.Aliases;
 +import org.apache.solr.common.cloud.ClusterState;
 +import org.apache.solr.common.cloud.ZkStateReader;
 +import org.apache.solr.common.luke.FieldFlag;
 +
 +import java.io.IOException;
 +import java.util.EnumSet;
 +import java.util.Map;
 +import java.util.Properties;
 +import java.util.Set;
 +
 +class SolrSchema extends AbstractSchema {
 +  final Properties properties;
 +
 +  SolrSchema(Properties properties) {
 +    super();
 +    this.properties = properties;
 +  }
 +
 +  @Override
 +  protected Map<String, Table> getTableMap() {
 +    String zk = this.properties.getProperty("zk");
 +    try(CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zk).build()) {
 +      cloudSolrClient.connect();
 +      ZkStateReader zkStateReader = cloudSolrClient.getZkStateReader();
 +      ClusterState clusterState = zkStateReader.getClusterState();
 +
 +      final ImmutableMap.Builder<String, Table> builder = ImmutableMap.builder();
 +
 +      for (String collection : clusterState.getCollectionsMap().keySet()) {
 +        builder.put(collection, new SolrTable(this, collection));
 +      }
 +
-       for (Map.Entry<String, String> alias : zkStateReader.getAliases().getCollectionAliasMap().entrySet()) {
-         builder.put(alias.getKey(), new SolrTable(this, alias.getValue()));
++      Aliases aliases = zkStateReader.getAliases();
++      if(aliases.collectionAliasSize() > 0) {
++        for (Map.Entry<String, String> alias : aliases.getCollectionAliasMap().entrySet()) {
++          builder.put(alias.getKey(), new SolrTable(this, alias.getValue()));
++        }
 +      }
 +
 +      return builder.build();
 +    } catch (IOException e) {
 +      throw new RuntimeException(e);
 +    }
 +  }
 +
 +  private Map<String, LukeResponse.FieldInfo> getFieldInfo(String collection) {
 +    String zk = this.properties.getProperty("zk");
 +    try(CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(zk).build()) {
 +      cloudSolrClient.connect();
 +      LukeRequest lukeRequest = new LukeRequest();
 +      lukeRequest.setNumTerms(0);
 +      LukeResponse lukeResponse = lukeRequest.process(cloudSolrClient, collection);
 +      return lukeResponse.getFieldInfo();
 +    } catch (SolrServerException | IOException e) {
 +      throw new RuntimeException(e);
 +    }
 +  }
 +
 +  RelProtoDataType getRelDataType(String collection) {
 +    // Temporary type factory, just for the duration of this method. Allowable
 +    // because we're creating a proto-type, not a type; before being used, the
 +    // proto-type will be copied into a real type factory.
 +    final RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT);
 +    final RelDataTypeFactory.FieldInfoBuilder fieldInfo = typeFactory.builder();
 +    Map<String, LukeResponse.FieldInfo> luceneFieldInfoMap = getFieldInfo(collection);
 +    for(Map.Entry<String, LukeResponse.FieldInfo> entry : luceneFieldInfoMap.entrySet()) {
 +      LukeResponse.FieldInfo luceneFieldInfo = entry.getValue();
 +
 +      RelDataType type;
 +      switch (luceneFieldInfo.getType()) {
 +        case "string":
 +          type = typeFactory.createJavaType(String.class);
 +          break;
 +        case "int":
 +        case "long":
 +          type = typeFactory.createJavaType(Long.class);
 +          break;
 +        case "float":
 +        case "double":
 +          type = typeFactory.createJavaType(Double.class);
 +          break;
 +        default:
 +          type = typeFactory.createJavaType(String.class);
 +      }
 +
 +      EnumSet<FieldFlag> flags = luceneFieldInfo.getFlags();
 +      if(flags != null && flags.contains(FieldFlag.MULTI_VALUED)) {
 +        type = typeFactory.createArrayType(type, -1);
 +      }
 +
 +      fieldInfo.add(entry.getKey(), type).nullable(true);
 +    }
 +
 +    return RelDataTypeImpl.proto(fieldInfo.build());
 +  }
 +}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/3793eb5e/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
----------------------------------------------------------------------
diff --cc solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
index fd088f1,5b806a8..e84cb69
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
@@@ -904,6 -914,17 +914,16 @@@ public class StreamExpressionTest exten
      t = tuples.get(1);
      assertTrue(t.getString("id").equals("9"));
  
 -
+     stream = factory.constructStream("having(rollup(over=a_f, sum(a_i), search(" + COLLECTIONORALIAS + ", q=*:*, fl=\"id,a_s,a_i,a_f\", sort=\"a_f asc\")), and(eq(sum(a_i), 9),eq(sum(a_i), 9)))");
+     context = new StreamContext();
+     context.setSolrClientCache(solrClientCache);
+     stream.setStreamContext(context);
+     tuples = getTuples(stream);
+ 
+     assert(tuples.size() == 1);
+     t = tuples.get(0);
+     assertTrue(t.getDouble("a_f") == 10.0D);
+ 
      solrClientCache.close();
    }
  
@@@ -1001,6 -1023,19 +1022,17 @@@
      t = tuples.get(1);
      assertTrue(t.getString("id").equals("9"));
  
+     stream = factory.constructStream("parallel("+COLLECTIONORALIAS+", workers=2, sort=\"a_f asc\", having(rollup(over=a_f, sum(a_i), search(" + COLLECTIONORALIAS + ", q=*:*, fl=\"id,a_s,a_i,a_f\", sort=\"a_f asc\", partitionKeys=a_f)), and(eq(sum(a_i), 9),eq(sum(a_i),9))))");
+     context = new StreamContext();
+     context.setSolrClientCache(solrClientCache);
+     stream.setStreamContext(context);
+     tuples = getTuples(stream);
+ 
+     assert(tuples.size() == 1);
+ 
+     t = tuples.get(0);
+     assertTrue(t.getDouble("a_f") == 10.0D);
+ 
 -
 -
      solrClientCache.close();
    }