@searchkit/schema
v3.0.0
Published
Elasticsearch GraphQL Resolvers
Downloads
16,034
Readme
Searchkit
Searchkit GraphQL Schema
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
{
results(query: "heat") {
hits {
items {
... on ResultHit {
id
fields {
title
}
}
}
}
}
}
Facets
{
results(query: "heat") {
facets {
identifier
label
type
display
entries {
label
count
}
}
hits {
items {
id
fields {
title
}
}
}
}
}
Filtering
{
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.