npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@forestadmin-experimental/datasource-elasticsearch

v0.6.0

Published

The elastic search data source allows importing collections from an elastic search instance.

Downloads

91

Readme

The elastic search data source allows importing collections from an elastic search instance.

To make everything work as expected, you need to install the package @forestadmin-experimental/datasource-elasticsearch.

Compatibility

Language clients are forward compatible; meaning that clients support communicating with greater or equal minor versions of Elasticsearch without breaking. Elasticsearch language clients are only backwards compatible with default distributions and without guarantees made. For example, all 8.15+ clients will work with a @forestadmin-experimental/datasource-elasticsearch v1.0.

| Elasticsearch Version | Supported by | | --------------------- | ------------ | | 8.x | 1.x | | 7.x | 0.x |

Usage

Note that:

  • Joins are not supported at the moment
  • Object (sub-model in models) are not supported at the moment
  • Points are not supported at the moment
  • Arrays are not supported out of the box. See the section Specifying that a field is an array
const { createAgent } = require('@forestadmin/agent');

const { createElasticsearchDataSource } = require('@forestadmin-experimental/datasource-elasticsearch');

// Create agent and import collections from elastic search
const agent = createAgent(options).addDataSource(
    createElasticsearchDataSource('http://localhost:9200', configuration =>
      configuration
        // Add the kibana_sample_data_flights index example
        .addCollectionFromIndex({ name: 'Flights', indexName: 'kibana_sample_data_flights' })

        // Add the kibana_sample_data_ecommerce index example
        .addCollectionFromIndex({ name: 'eCommerce', indexName: 'kibana_sample_data_ecommerce' })

        // Add a custom collection template based
        .addCollectionFromTemplate({
          name: 'ActivityLogs',
          templateName: 'activity-logs-v1-template',
          // Allow to properly generate index name for records creation based on custom logic
          // activity-logs-v1-read-2023_05
          generateIndexName: ({ type, createdAt }) => {
            const createdDate = new Date(createdAt).toISOString();
            // NOTICE: getMonth() returns the month as a zero-based value
            const month = new Date(createdDate).getUTCMonth() + 1;

            const dateSuffix = `${new Date(createdDate).getUTCFullYear()}_${
              month < 10 ? '0' : ''
            }${month}`;

            return `activity-logs-v1-${type}-${dateSuffix}`;
          },
          // Optionally override the fields schemas generated by Forest
          overrideTypeConverter: field => {
            if (field.fieldName === 'label' || field.attribute.type === 'text')
              return { ...field.generatedFieldSchema, isSortable: false };
            if (field.fieldName === 'status')
              return {
                ...field.generatedFieldSchema,
                columnType: 'Enum',
                enumValues: ['creating', 'pending', 'live', 'disabled'],
              };
          },
        }),
    ),
  ));

Tips

Specifying that a field is an array

In Elasticsearch, there is no dedicated array data type. Any field can contain zero or more values by default, however, all values in the array must be of the same data type. So, you will need to hand-specify that a field is indeed an array.

document is a keyword type seen as a String in the Forest Admin world but we use it with multiple values so let's make it an array of String

collection.removeField('document').addField('documents', {
        columnType: ['String'],
        dependencies: ['document'],
        getValues: records => records.map(record => record.document),
      });

TODO

  • Create a plugin for specifying fields that are arrays (or add an option to the data source configuration builder)
  • Handle Joins
  • Handle Object