@searchkit/schema
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.0-canary.41 • Public • Published

    Searchkit

    Searchkit GraphQL Schema

    npm version

    Searchkit Schema is a library which allows you to build a GraphQL Search API designed for Search UI experiences with configuration. It integrates with Elasticsearch to provide search features like full-text search, faceted filtering, sorting, relevency tweaking and query highlighting.

    Documentation

    All Searchkit documentation can be found at:
    https://searchkit.co/docs/

    The Searchkit Schema API reference can be found at:
    https://searchkit.co/docs/reference/schema

    Quick Intro

    From a configuration

    const searchkitConfig = {
      host: 'http://localhost:9200/', // elasticsearch instance url
      index: 'movies',
      hits: {
        fields: [ 'title', 'plot', 'poster' ]
      },
      query: new MultiMatchQuery({ 
        fields: [ 'plot','title^4'] 
      }),
      facets: [
        new RefinementSelectFacet({ 
          identifier: 'type',
          field: 'type.raw',
          label: 'Type'
        }),
        new RefinementSelectFacet({
          identifier: 'writers',
          field: 'writers.raw',
          label: 'Writers',
          multipleSelect: true
        }),
        new RangeFacet({
          identifier: 'metascore',
          field: 'metaScore',
          label: 'Metascore',
          range: {
            min: 0,
            max: 100,
            interval: 5
          }
        }),
        new DateRangeFacet({
          identifier: 'released',
          field: 'released',
          label: 'Released'
        })
      ]
    }
    
    const { typeDefs, withSearchkitResolvers, context } = SearchkitSchema({
      config: searchkitConfig,
      typeName: 'ResultSet', 
      hitTypeName: 'ResultHit',
      addToQueryType: true 
    })
    
    const server = new ApolloServer({
      typeDefs: [
        gql`
        type Query {
          root: String
        }
    
        type HitFields {
          title: String
        }
    
        type ResultHit implements SKHit {
          id: ID!
          fields: HitFields
        }
      `, ...typeDefs
      ],
      resolvers: withSearchkitResolvers({}),
      introspection: true,
      playground: true,
      context: {
        ...context
      }
    })

    Will provide a GraphQL API where you can perform queries like:

    Simple Hits

    Try it out

    {
      results(query: "heat") {
        hits {
          items {
            ... on ResultHit {
              id
              fields {
                title
              }
            }
          }
        }
      }
    }

    Facets

    Try it out

    {
      results(query: "heat") {
        facets {
          identifier
          label
          type
          display
          entries {
            label
            count
          }
        }
        hits {
          items {
            id
            fields {
              title
            }
          }
        }
      }
    }

    Filtering

    Try it out

    {
      results(filters: [{identifier: "type", value: "Movie"}, {identifier: "metascore", min: 30}]) {
        summary {
          appliedFilters {
            appliedFilters {
              identifier
              id
              label
              display
              ... on ValueSelectedFilter {
                value
              }
            }
          }
        }
        facets {
          identifier
          label
          type
          display
          entries {
            label
            count
          }
        }
        hits {
          items {
            ... on ResultHit {
              id
              fields {
                title
              }
            }
          }
        }
      }
    }

    See Schema Query Guide for more examples.

    Getting highlights for matches

    See highlighting fields for more information.

    Install

    npm i @searchkit/schema

    DownloadsWeekly Downloads

    2,499

    Version

    3.0.0-canary.41

    License

    Apache-2.0

    Unpacked Size

    374 kB

    Total Files

    126

    Last publish

    Collaborators

    • avatar
    • avatar