We use asJsonString to define a native Elasticsearch field that will use JSON for its field definition, and will expect JSON as a java.lang.String when indexing. It's a bit confusing as one could expect the string to actually be interpreted as a string, not parsed as JSON. Maybe we should rename to asNative?
Maybe we should also expose asNativeBoolean, asNativeString, etc. to define native Elasticsearch fields that will use JSON for their definition, but expect a Java type when indexing and will encode it appropriately?
To be consistent, maybe we should also rename fromJsonString in the predicate factory contexts to fromNative?
To be consistent, maybe we should do the same for Lucene? asNativeField for field definition, fromNative for predicates?
Also, we use fromJsonString/fromLuceneSort in the sort factory contexts. In Search 5 we used to name these methods byNative, which is more consistent with the other byXXX methods. Maybe we should do the same in Search 6?