当我尝试访问脚本末尾的len-variables时,我收到此错误:"无法迭代两次!如果你想迭代一次,请明确地添加_CACHE。"
我该如何解决?
def src_str = query_string
def src_arr = src_str.split(' ')
def trg_arr = doc['my_index'].values
trg_arr_sorted = [:]
trg_arr.each {
_index['my_index'].get(it, _POSITIONS).each { pos ->
trg_arr_sorted[pos.position] = it
}
}
src_len = src_arr.length
def trg_len = trg_arr_sorted.size()
int[][] matrix = new int[src_len + 1][trg_len + 1]
(src_len + 1).times { matrix[it][0] = it }
(trg_len + 1).times { matrix[0][it] = it }
(1..src_len).each { i ->
(1..trg_len).each { j ->
matrix[i][j] = [matrix[i-1][j] + 1, matrix[i][j-1] + 1,
src_arr[i-1] == trg_arr_sorted[j-1] ? matrix[i-1][j-1] : matrix[i-1][j-1] + 1].min()
}
}
return 100 - (100 * matrix[src_len][trg_len] / max(src_len, trg_len)) // over here !!!
代码使用以单词计算的levenshtein距离计算分数。除了最后一行的得分外,它的表现非常完美。
答案 0 :(得分:0)
好的问题已经解决了。
我明确地必须声明缓存和位置:
_index['lang'].get(it, _POSITIONS | _CACHE)
错误不在最后一行,但我是这么认为的。我更改了脚本以调试它,但elasticsearch不会立即重新加载新的scipt。