Trying to do something which should be simple. Using Painless, take a value like "1.4" and another like "1.5", and using the first and second number, pop the name from a dictionary. I know there are methods like substr, but I don't know how to use them properly.
def dict = ['1.4': spaceship, '1.5': satelite]
def strct = doc['entityType.keyword'].value;
def first = strct.indexOf('.');
def second = first + 1 + strct.substring(first +1).indexOf('.');
def value = strct[0:first] + '-' +strct[first:second]
emit(dict[value].value)
You can do this in many ways, and I'm not sure about the content of your entityType field but in the Painless Lab application in the Dev Tools you can try easily to code different approaches that later you can adapt to your context.
For example this works for me:
def dict = ['1.4': 'spaceship', '1.5': 'satelite'];
def test_string = "A string with 1.5 on it";
for (key in dict.keySet()) {
if ( test_string.contains(key) ) {
return dict[key];
}
}
return "Not found
def dict = ['1.4': 'spaceship', '1.5': 'satelite'];
def test_string = "A string with 1.5";
def from = test_string.indexOf('.');
if (from != -1){
def key = test_string.substring(from - 1, from + 2 );
def value = dict[key];
if (value != null) {
return value;
}
}
return "Not found"
``
Check all the methods available for strings at
https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-template-java-lang.html#painless-api-reference-template-String
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.