[英]ElasticSearch. How to get '_score' field of hit?
我有以下代碼:
export const getUserIds = async (search) => {
const requestBody = {
query_string: {
query: `*${search}*`,
fields: [
`firstName^${FIELD_PRIORITIES.FIRSTNAME}`,
`lastName^${FIELD_PRIORITIES.LASTNAME}`,
`username^${FIELD_PRIORITIES.USERNAME}`,
],
},
};
const resultOfElastic = await client.search({
...ES_CONFIG.INDEX,
...ES_CONFIG.USER.TYPE,
body: {
query: requestBody,
},
size: 1000,
});
const orderedHits = _.orderBy(resultOfElastic.hits.hits, ['_score', 'desc']);
return orderedHits.map((user) => stringToObjectId(user._id));
};
因為ES不會在_score
字段上對結果進行排序, _score
我需要在代碼中進行處理。 ElasticSearch的結果為resultOfElastic.hits.hits
,每個命中都有_score
字段。 我嘗試使用Lodash通過命令命中_score
,但沒有任何反應。 如何按字段_score
排序匹配?
您可以使用布爾查詢基於_sort進行排序
{
"from": 0,
"size": 50,
body: {
query: {
bool: {
must: [{
match:{
"firstName":${FIELD_PRIORITIES.FIRSTNAME}`,
"lastName":${FIELD_PRIORITIES.LASTNAME}`,
"username":${FIELD_PRIORITIES.USERNAME}`,
}
}, ],
should: [{
match:{
"meta": searchString
}
}, ]
},
},
sort: {
_score : {
"order": "desc"
}
},
}
}
布爾的詳細信息可以在這里找到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.