【问题标题】:Cache a variable in groovy在groovy中缓存一个变量
【发布时间】:2014-08-20 11:17:46
【问题描述】:

当我尝试访问脚本末尾的 len 变量时,我收到以下错误:“无法迭代两次!如果您想多次迭代,请显式添加 _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 距离计算分数。除了最后一行的得分外,它运行良好。

【问题讨论】:

    标签: variables caching groovy elasticsearch integer


    【解决方案1】:

    好的,问题解决了。

    我必须明确声明缓存和位置:

    _index['lang'].get(it, _POSITIONS | _CACHE)
    

    错误不在最后一行,但我是这么认为的。我更改了脚本以对其进行调试,但 elasticsearch 不会立即重新加载新的 scipt。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2017-02-09
      • 2016-10-17
      • 2019-05-23
      • 2012-09-15
      • 1970-01-01
      相关资源
      最近更新 更多