0

我们目前正在构建一个基于 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

任何帮助将不胜感激。谢谢。

4

0 回答 0