Reputation: 15141
I have a use case which is a bit similar to the ES example of dynamic_template where I want certain strings to be analyzed and certain not.
My document fields don't have such a convention and the decision is made based on an external schema. So currently my flow is:
ORIGINALNAME_analyzed
This will handle the analyzed/not_analyzed problem thanks to dynamic_template I set but now the user doesn't know which fields are analyzed so there's no easy way for him to write queries because he doesn't know what's the name of the field.
I wanted to use field name aliases but apparently ES doesn't support them. Are there any other mechanisms I'm missing I could use here like field rename after indexation or something else?
For example this ancient thread mentions that field.sub.name
can be queried as just name
but I'm guessing this has changed when they disallowed .
in the name some time ago since I cannot get it to work?
Upvotes: 0
Views: 406
Reputation: 6357
Let the user only create queries with the original name. I believe you have some code that converts this user query to Elasticsearch query. When converting to Elasticsearch query, instead of using the field name provided by the user alone use both the field names ORIGINALNAME
as well as ORIGINALNAME_analyzed
. If you are using a match
query, convert it to multi_match
. If you are using a term
query, convert it to a bool
should
query. I guess you get where I am going with this.
Elasticsearch won't mind if a field does not exists. This can be a problem if there is already a field with _analyzed
appended in its original name. But with some tricks that can be fixed too.
Upvotes: 1