We’ve shipped new patch releases of ExamineX for Azure Search and ExamineX for Elasticsearch for every supported Umbraco version. The main fix is for a few ways an index rebuild could end up with far fewer documents than it should, or none at all, without an obvious error, so we’d recommend everyone upgrades.

Which version do I need?

Umbraco Azure Search Elasticsearch
13 6.3.0 3.3.0
15 7.2.0 4.2.0
16 8.2.0 5.2.0
17 9.3.2 6.3.2
18 10.0.1 7.0.1

There are no breaking changes, it’s just a NuGet update.

Rebuilds silently losing documents

Umbraco sends content to the index in batches of 10,000, and if anything in a batch threw an exception, the whole batch was dropped. The exception was logged but the rebuild carried on, so you’d end up with an index that was missing a pile of content and it wasn’t obvious why.

For Elasticsearch there were a couple of ways to hit this:

  • A field whose name only differed by case from one already in the mapping was treated as existing when ensuring fields, but as missing when building the bulk request. That threw and the batch was gone.
  • Index names are only precise to the second, so two rebuilds in the same second generated the same name, and the second one failed with resource_already_exists_exception and didn’t do anything.

For Azure Search, field references are cached, so if another instance changed the index the cache could go stale and a field would fail to resolve, which threw away the batch.

In both cases, if a field can’t be resolved now, ExamineX re-reads the index definition, ensures the fields again and retries. If a field still can’t be resolved it’s logged and everything else in the batch is indexed instead of being lost with it.

Empty ManagedQuery values

If you passed an empty, whitespace or stop-word-only value to ManagedQuery, it could end up as an empty +() clause in the query:

+x__IndexType:content +() +(culture:da culture:none) +published:y

Azure Search rejects that with a 400 Bad Request. Empty clauses are now skipped (#138). This already shipped for Umbraco 17 and 18 and is now in the 13, 15 and 16 versions too.

Index Info showing type names

In Settings -> ExamineX -> Index Info, the include/exclude field lists could show something like <>z__ReadOnlyArray`1[System.String] instead of the actual values. That’s fixed for Umbraco 15 and up (#139), Umbraco 13 wasn’t affected.

Semantic ranking on Umbraco 18

The semantic ranking fixes that shipped for Umbraco 17 in 9.3.1 are now in 10.0.1 too. Semantic ranking now applies even if you don’t set SemanticQuery, and semantic queries default to SearchMode.Any so natural language questions give it a lot more to work with.

For the full details see the release notes for 6.3.0 / 7.2.0 / 8.2.0 and 9.3.2 / 10.0.1.

Happy Searching!