Here is how I do it now:
..
.setQuery(
filteredQuery(
multiMatchQuery(String.format("*%s*", query), "name", "address", "phone")
.type(MultiMatchQueryBuilder.Type.CROSS_FIELDS),
geoDistanceFilter("location")
.distance(radius, DistanceUnit.KILOMETERS)
.geoDistance(GeoDistance.PLANE)
.point(latitude, longitude)
)
)
..
The issue is that it doesn't search for partial phrases or parts of words.. even with wildcards..
I found matchPhraseQuery
but it seems that it works only with one field.. Is there any other way to implement such search?