README.md

July 15, 2022 ยท View on GitHub

Overview

This is an Elasticsearch provider for Transformalize using Elasticsearch.Net. It has been tested and works with Elasticsearch 7 through 8.

๐ŸŽฑ Elasticsearch v8 Changes

Security is on by default in version 8. This includes user, password, and SSL. Therefore, you may need to add these properties to your connection:

  • use-ssl: true|false and is used to build the URL if you are using server instead of url.
  • certificate-fingerprint: output on first ES start.
  • user: output on first ES start (defaults to elastic)
  • password: output on first ES start

Current Issues/Constraints

  • Every identifier is lower-cased before going into Elasticsearch.
  • If you don't specify a three part version in your connection you could default an incorrect version and experience issues.

Write Usage

<add name='TestProcess' mode='init'>
  <connections>
    <add name='input' provider='bogus' seed='1' />
    <add name='output' provider='elasticsearch' index='bogus' server='localhost' port='9200' version='7.9.3' />
    <!-- example 8
    <add name='output' provider='elasticsearch' index='bogus' server='localhost' port='9200' version='8.3.2' user='elastic' password='Zgf4+hQ7+dmCnIUpk6Wr' use-ssl='true' certificate-fingerprint='37:84:43:71:D1:57:AE:34:9D:FE:FB:2A:A5:E2:DC:65:7B:62:16:9C:8E:E3:58:DB:30:EF:CD:9E:06:85:7D:03' />
    -->
  </connections>
  <entities>
    <add name='Contact' size='1000'>
      <fields>
        <add name='Identity' type='int' primary-key='true' />
        <add name='FirstName' />
        <add name='LastName' />
        <add name='Stars' type='byte' min='1' max='5' />
        <add name='Reviewers' type='int' min='0' max='500' />
      </fields>
    </add>
  </entities>
</add>

This writes 1000 rows of bogus data.

Read Usage

<add name='TestProcess' >
  <connections>
    <add name='input' provider='elasticsearch' index='bogus' port='9200' version='7.9.3' />
  </connections>
  <entities>
    <add name='contact' page='1' size='10'>
      <order>
        <add field='identity' />
      </order>
      <fields>
        <add name='identity' type='int' />
        <add name='firstname' />
        <add name='lastname' />
        <add name='stars' type='byte' />
        <add name='reviewers' type='int' />
      </fields>
    </add>
  </entities>
</add>

This reads 10 rows of bogus data:

identity,firstname,lastname,stars,reviewers
1,Justin,Konopelski,3,153
2,Eula,Schinner,2,41
3,Tanya,Shanahan,4,412
4,Emilio,Hand,4,469
5,Rachel,Abshire,3,341
6,Doyle,Beatty,4,458
7,Delbert,Durgan,2,174
8,Harold,Blanda,4,125
9,Willie,Heaney,5,342
10,Sophie,Hand,2,176

If using a multi-node cluster, you may specify servers in your connection with url or (name and port) attributes:

<connections>
   <add name="x" provider="elasticsearch" index="y" version="7.9.3">
      <servers>
         <add url="http://node1:9200" />
         <add url="http://node2:9200" />
      </servers>
   </add>
</connections>