ElasticsearchOptions

ElasticsearchOptions

ElasticsearchOptions

Configuration options for the ElasticsearchPlugin.

Signature

interface ElasticsearchOptions {
  host: string;
  port: number;
  indexPrefix?: string;
  batchSize?: number;
  searchConfig?: SearchConfig;
  customProductMappings?: {
        [fieldName: string]: CustomMapping<[Product, ProductVariant[]]>;
    };
  customProductVariantMappings?: {
        [fieldName: string]: CustomMapping<[ProductVariant]>;
    };
}

Members

host

property
type:
string
The host of the Elasticsearch server.

port

property
type:
number
The port of the Elasticsearch server.

indexPrefix

property
type:
string
default:
'vendure-'
Prefix for the indices created by the plugin.

batchSize

property
type:
number
default:
2000
Batch size for bulk operations (e.g. when rebuilding the indices).

searchConfig

property
type:
SearchConfig
Configuration of the internal Elasticseach query.

customProductMappings

property
type:
{ [fieldName: string]: CustomMapping<[Product, ProductVariant[]]>; }

Custom mappings may be defined which will add the defined data to the Elasticsearch index and expose that data via the SearchResult GraphQL type, adding a new customMappings field.

The graphQlType property may be one of String, Int, Float, Boolean and can be appended with a ! to indicate non-nullable fields.

This config option defines custom mappings which are accessible when the “groupByProduct” input options is set to true.

Example

customProductMappings: {
   variantCount: {
       graphQlType: 'Int!',
       valueFn: (product, variants) => variants.length,
   },
   reviewRating: {
       graphQlType: 'Float',
       valueFn: product => (product.customFields as any).reviewRating,
   },
}

Example

query SearchProducts($input: SearchInput!) {
    search(input: $input) {
        totalItems
        items {
            productId
            productName
            customMappings {
                ...on CustomProductMappings {
                    variantCount
                    reviewRating
                }
            }
        }
    }
}

customProductVariantMappings

property
type:
{ [fieldName: string]: CustomMapping<[ProductVariant]>; }

This config option defines custom mappings which are accessible when the “groupByProduct” input options is set to false.

Example

query SearchProducts($input: SearchInput!) {
    search(input: $input) {
        totalItems
        items {
            productId
            productName
            customMappings {
                ...on CustomProductVariantMappings {
                    weight
                }
            }
        }
    }
}

SearchConfig

Configuration options for the internal Elasticsearch query which is generated when performing a search.

Signature

interface SearchConfig {
  facetValueMaxSize?: number;
  multiMatchType?: 'best_fields' | 'most_fields' | 'cross_fields' | 'phrase' | 'phrase_prefix' | 'bool_prefix';
  boostFields?: BoostFieldsConfig;
  priceRangeBucketInterval?: number;
}

Members

facetValueMaxSize

property
type:
number
default:
50
The maximum number of FacetValues to return from the search query. Internally, this value sets the “size” property of an Elasticsearch aggregation.

multiMatchType

property
type:
'best_fields' | 'most_fields' | 'cross_fields' | 'phrase' | 'phrase_prefix' | 'bool_prefix'
default:
'best_fields'
Defines the multi match type used when matching against a search term.

boostFields

property
Set custom boost values for particular fields when matching against a search term.

priceRangeBucketInterval

property
type:
number

The interval used to group search results into buckets according to price range. For example, setting this to 2000 will group into buckets every $20.00:

{
  "data": {
    "search": {
      "totalItems": 32,
      "priceRange": {
        "buckets": [
          {
            "to": 2000,
            "count": 21
          },
          {
            "to": 4000,
            "count": 7
          },
          {
            "to": 6000,
            "count": 3
          },
          {
            "to": 12000,
            "count": 1
          }
        ]
      }
    }
  }
}

BoostFieldsConfig

Configuration for boosting the scores of given fields when performing a search against a term.

Boosting a field acts as a score multiplier for matches against that field.

Signature

interface BoostFieldsConfig {
  productName?: number;
  productVariantName?: number;
  description?: number;
  sku?: number;
}

Members

productName

property
type:
number
default:
1
Defines the boost factor for the productName field.

productVariantName

property
type:
number
default:
1
Defines the boost factor for the productVariantName field.

description

property
type:
number
default:
1
Defines the boost factor for the description field.

sku

property
type:
number
default:
1
Defines the boost factor for the sku field.