我已经建立了这个相对复杂的搜索查询,并且可以进行完美的排序。
但是我认为这里由于脚本的原因搜索很慢,所以我想删除脚本并相应地编写查询。
当前代码:-
'MQL_DLLS_ALLOWED' - l-value required TestingEnum.mq5 15 4
'1' - cannot convert enum TestingEnum.mq5 15 22
'=' - l-value required TestingEnum.mq5 15 21
以上代码说明:-
例如,如果匹配查询给出的结果如下:
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "double pscore = 0;for(id in params.boost_ids){if(params._source.midoffice_master_id == id){pscore = -999999999;}}return pscore;",
"params": {
"boost_ids": [
3,
4,
5
]
}
}
}
}]
所以我想使用m_id数组[3,4,5]增强文档,然后将结果转换为:
[{m_id: 1, name: A}, {m_id: 2, name: B}, {m_id: 3, name: C}, {m_id: 4, name: D}, ...]
答案 0 :(得分:1)
您可以使用Function Score Query(用于提升)和Terms Query(用于查询值数组)来使用以下查询
请注意,我提到的逻辑在bool query的should
子句中。
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {} //just a sample must clause to retrieve all docs
}
],
"should": [
{
"function_score": { <---- Function Score Query
"query": {
"terms": { <---- Terms Query
"m_id": [
3,4,5
]
}
},
"boost": 100 <---- Boosting value
}
}
]
}
}
}
因此,基本上,您可以完全删除排序逻辑,并在function query
子句中添加以上should
,这将为您提供所需的结果。
请注意,如果您有非常复杂的查询,并且如果遇到任何困难,请务必设法正确添加逻辑。我很乐意提供帮助!
希望这会有所帮助!