我们目前正在构建一个基于 elasticsearch 的搜索工具,我们的查询涉及将最接近的值与用户输入值进行匹配。假设用户输入 [1,10,100,1000,10000] 它应该返回数组中每个元素的索引中可用的最接近的值。
现在我们正在使用以下查询一次检索一个值,并且我们通过循环传递用户输入数组,它真的很慢。
{
"query": {
"term": {"CHR": "chr1"}
},
"sort" : {
"_script" : {
"type" : "number",
"script" : {
"lang": "painless",
"params": {
"factor": 10000
},
"inline": "def cur = 0; cur = (params.factor - doc['START'].value); if (cur < 0) { cur = cur * -1 } else { cur = cur}" },
"order" : "asc"
}
}
}
我们的要求是该因子将采用整数数组而不是单个值,并给出它在索引中找到的第一个最接近的值。
下面贴出完整的python函数(Python)
def gene_peek(coordinate, chr):
peek_liver = []
for i in range(0,len(coordinate)):
a = int(coordinate[i])
res = requests.post("http://localhost:9200/lab/peek_liver/_search?pretty=true&scroll=10m&size=1", json={
"query": {
"term": {"CHR": chr[i]}
},
"sort" : {
"_script" : {
"type" : "number",
"script" : {
"lang": "painless",
"params": {
"factor": a
},
"inline": "def cur = 0; cur = (params.factor - doc['START'].value); if (cur < 0) { cur = cur * -1 } else { cur = cur}" },
"order" : "asc"
}
}
})
data = res.json()
peek_liver.append(data["hits"]["hits"][0]["_source"])
return peek_liver
任何帮助将不胜感激。谢谢。