Add Any Field With a Suffix - Dynamic Fields

Name a field with the right suffix and it exists

Add any field with a suffix

You never edit the schema to add a field. Name it with the right ending, such as price_f or brand_sm, and it is created with the matching type the first time a document carries it. The ending decides everything: searched as text or matched exactly, and whether it can be a facet, be sorted or take a range.

The suffixes

SuffixTypeExampleFacetSortRangeSearch
*_sstringcurrency_s: "EUR"Listyesnoexact
*_smstring, listbrand_sm: ["Nike","Asics"]Listnonoexact
*_ssstring, listcolour_ss: ["red","blue"]Listnonoexact
*_ttext_generalspecs_t: "Gore-Tex upper"nononowords
*_ipintstock_i: 42List, Slideryesyesno
*_impint, listsizes_im: [40,41,42]List, Slidernoyesno
*_lplongviews_l: 1284930112List, Slideryesyesno
*_fpfloatprice_f: 79.99List, Slideryesyesno
*_fmpfloat, listprices_fm: [79.99,69.99]List, Slidernoyesno
*_dpdouble, listweight_d: [0.245]List, Slidernoyesno
*_dtpdatedate_dt: "2026-01-15T10:30:00Z"List, Date rangeyesyesno
*_dtmpdate, listevents_dtm: [...]List, Date rangenoyesno
*_bbooleanin_stock_b: trueListyesnono
meta_*stringmeta_sku: "AX-100"Listyesnoexact
phonetic_*text_general_phoneticphonetic_textnononosounds like
ignored_*, *_nlpignored, listignored_debugnononono

Facet shows the sidebar filters a field can use: a whole-seconds _i or _l field can also be a Duration, and a list field named by level, such as breadcrumb_1_sm, a Hierarchical filter. See Facet fields.

Rules worth knowing

Dates
A _dt field wants ISO 8601 in UTC: 2026-01-15T10:30:00Z. A bare 2026-01-15 or a Unix time is refused. Send Unix time in timestamp instead and Opensolr fills creation_date for you.
Longest pattern wins
When a name matches two patterns, the longer one wins. meta_price_f matches meta_* before *_f, so it becomes a string and loses range filters. Keep type suffixes out of the meta_ names: use price_f.
No suffix, no field
A field that matches no pattern and no core field, such as price, is refused and the document fails. Every field of your own needs a suffix or the meta_ prefix.
One value or many
A list sent to a one-value field (brand_s: ["a","b"]) fails. One value sent to a list field is fine.
Sorting needs one value
Only one-value fields sort predictably. List fields are for facets and filters, not for sort=.
Strings are exact
A _s or meta_ field matches the whole value, upper and lower case included. When people should search the words in it, send them in a _t field too, or in text.
The first value decides
Once price_f holds numbers, you cannot send "n/a" into it.

A product, start to finish

One document pushed with Data Ingestion, and the searches its suffixes make possible.

{
  "uri":          "https://shop.example.com/products/trail-runner-x",
  "title":        "Trail Runner X",
  "description":  "Lightweight trail shoe with a Gore-Tex upper.",
  "text":         "Full product description, care instructions, reviews ...",
  "timestamp":    1768473000,
  "price_f":      129.0,
  "currency_s":   "EUR",
  "brand_sm":     ["Asics"],
  "sizes_im":     [40, 41, 42, 43],
  "in_stock_b":   true,
  "specs_t":      "Gore-Tex upper, Vibram sole, 245 g",
  "meta_sku":     "TRX-129"
}
You wantParameter
Shoes between 100 and 150 eurofq=price_f:[100 TO 150]&fq=currency_s:EUR
Only in stock, cheapest firstfq=in_stock_b:true&sort=price_f asc
Brand counts for the sidebarfacet=true&facet.field=brand_sm
Anything in size 42fq=sizes_im:42
Added in the last 30 daysfq=creation_date:[NOW-30DAYS TO NOW]
Look up by your own SKUfq=meta_sku:TRX-129

The hosted search page builds these for you from your Facets settings.

Schema reference pages

Back to Enterprise Site Search