---
apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-solr
      version: 1.1.28
      group: io.fabric8.funktion.connector
    name: solr
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: solr
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: solr
          spec:
            containers:
            - image: fabric8/connector-solr:1.1.28
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: solr
        alternativeSchemes: solr,solrs,solrCloud
        syntax: solr:url
        title: Solr
        description: The solr component allows you to interface with an Apache Lucene Solr server.
        label: monitoring,search
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.solr.SolrComponent
        groupId: org.apache.camel
        artifactId: camel-solr
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname and port for the solr server
        allowCompression:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Server side must support gzip or deflate for this to have any effect
        connectionTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: connectionTimeout on the underlying HttpConnectionManager
        defaultMaxConnectionsPerHost:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxConnectionsPerHost on the underlying HttpConnectionManager
        followRedirects:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: indicates whether redirects are used to get to the Solr server
        maxRetries:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of retries to attempt in the event of transient errors
        maxTotalConnections:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxTotalConnection on the underlying HttpConnectionManager
        requestHandler:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the request handler to be used
        soTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
        streamingQueueSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Set the queue size for the StreamingUpdateSolrServer
        streamingThreadCount:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2"
          description: Set the number of threads for the StreamingUpdateSolrServer
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        collection:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the collection name which the solrCloud server could use
        zkHost:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
    documentation.adoc: |+
      [[Solr-SolrComponent]]
      Solr Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.9*

      The Solr component allows you to interface with an
      http://lucene.apache.org/solr/[Apache Lucene Solr] server (based on
      SolrJ 3.5.0).

      Maven users will need to add the following dependency to their `pom.xml`
      for this component:

      [source,xml]
      ------------------------------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-solr</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Solr-URIformat]]
      URI format
      ^^^^^^^^^^

      *NOTE:* solrs and solrCloud are new added since *Camel 2.14*.

      [source,java]
      --------------------------------------
      solr://host[:port]/solr?[options]
      solrs://host[:port]/solr?[options]
      solrCloud://host[:port]/solr?[options]
      --------------------------------------

      [[Solr-Options]]
      Solr Options
      ^^^^^^^^^^^^


      // component options: START
      The Solr component has no options.
      // component options: END



      // endpoint options: START
      The Solr component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | producer |  | String | *Required* Hostname and port for the solr server
      | allowCompression | producer |  | Boolean | Server side must support gzip or deflate for this to have any effect
      | connectionTimeout | producer |  | Integer | connectionTimeout on the underlying HttpConnectionManager
      | defaultMaxConnectionsPerHost | producer |  | Integer | maxConnectionsPerHost on the underlying HttpConnectionManager
      | followRedirects | producer |  | Boolean | indicates whether redirects are used to get to the Solr server
      | maxRetries | producer |  | Integer | Maximum number of retries to attempt in the event of transient errors
      | maxTotalConnections | producer |  | Integer | maxTotalConnection on the underlying HttpConnectionManager
      | requestHandler | producer |  | String | Set the request handler to be used
      | soTimeout | producer |  | Integer | Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
      | streamingQueueSize | producer | 10 | int | Set the queue size for the StreamingUpdateSolrServer
      | streamingThreadCount | producer | 2 | int | Set the number of threads for the StreamingUpdateSolrServer
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | collection | solrCloud |  | String | Set the collection name which the solrCloud server could use
      | zkHost | solrCloud |  | String | Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Solr-MessageOperations]]
      Message Operations
      ^^^^^^^^^^^^^^^^^^

      The following Solr operations are currently supported. Simply set an
      exchange header with a key of "SolrOperation" and a value set to one of
      the following. Some operations also require the message body to be set.

      * the INSERT operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.html[CommonsHttpSolrServer]
      * the INSERT_STREAMING operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.html[StreamingUpdateSolrServer]
      (*Camel 2.9.2*)

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Operation |Message body |Description

      |INSERT/INSERT_STREAMING |n/a |adds an index using message headers (must be prefixed with "SolrField.")

      |INSERT/INSERT_STREAMING |File |adds an index using the given File (using ContentStreamUpdateRequest)

      |INSERT/INSERT_STREAMING |SolrInputDocument |*Camel 2.9.2* updates index based on the given SolrInputDocument

      |INSERT/INSERT_STREAMING |String XML |*Camel 2.9.2* updates index based on the given XML (must follow
      SolrInputDocument format)

      |ADD_BEAN |bean instance |adds an index based on values in an
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |ADD_BEANS |collection<bean> |*Camel 2.15* adds index based on a collection of
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |DELETE_BY_ID |index id to delete |delete a record by ID

      |DELETE_BY_QUERY |query string |delete a record by a query

      |COMMIT |n/a |performs a commit on any pending index changes

      |ROLLBACK |n/a |performs a rollback on any pending index changes

      |OPTIMIZE |n/a |performs a commit on any pending index changes and then runs the
      optimize command
      |=======================================================================

      [[Solr-Example]]
      Example
      ^^^^^^^

      Below is a simple INSERT, DELETE and COMMIT example

      [source,java]
      ---------------------------------------------------------------------------------------
      from("direct:insert")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_INSERT))
          .setHeader(SolrConstants.FIELD + "id", body())
          .to("solr://localhost:8983/solr");

      from("direct:delete")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_DELETE_BY_ID))
          .to("solr://localhost:8983/solr");

      from("direct:commit")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT))
          .to("solr://localhost:8983/solr");
      ---------------------------------------------------------------------------------------

      [source,xml]
      ------------------------------------------
      <route>
          <from uri="direct:insert"/>
          <setHeader headerName="SolrOperation">
              <constant>INSERT</constant>
          </setHeader>
          <setHeader headerName="SolrField.id">
              <simple>${body}</simple>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:delete"/>
          <setHeader headerName="SolrOperation">
              <constant>DELETE_BY_ID</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:commit"/>
          <setHeader headerName="SolrOperation">
              <constant>COMMIT</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      ------------------------------------------

      A client would simply need to pass a body message to the insert or
      delete routes and then call the commit route.

      [source,java]
      -----------------------------------------------
          template.sendBody("direct:insert", "1234");
          template.sendBody("direct:commit", null);
          template.sendBody("direct:delete", "1234");
          template.sendBody("direct:commit", null);
      -----------------------------------------------

      [[Solr-QueryingSolr]]
      Querying Solr
      ^^^^^^^^^^^^^

      Currently, this component doesn't support querying data natively (may be
      added later). For now, you can query Solr using link:http.html[HTTP] as
      follows:

      [source,java]
      --------------------------------------------------------------------------------
      //define the route to perform a basic query
      from("direct:query")
          .recipientList(simple("http://localhost:8983/solr/select/?q=${body}"))
          .convertBodyTo(String.class);
      ...
      //query for an id of '1234' (url encoded)
      String responseXml = (String) template.requestBody("direct:query", "id%3A1234");
      --------------------------------------------------------------------------------

      For more information, see these resources...

      http://lucene.apache.org/solr/tutorial.html#Querying+Data[Solr Query
      Tutorial]

      http://wiki.apache.org/solr/SolrQuerySyntax[Solr Query Syntax]

      [[Solr-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

