我们目前正在构建一个基于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
非常感谢任何帮助。 感谢。