javascript - 弹性搜索。如何获得命中的“_score”字段?
问题描述
我有以下代码:
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
我需要在代码中进行。ElasticSearch 的结果是resultOfElastic.hits.hits
并且每个命中都有_score
字段。我尝试使用 Lodash 按 排序命中_score
,但没有任何反应。如何按字段对命中进行排序_score
?
解决方案
您可以使用 bool 查询在 _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"
}
},
}
}
bool 的详细信息可以在这里找到
推荐阅读
- python - 页面刷新后Python Django变量数据重复
- apache-nifi - 如何从流文件中剥离 NiFi 流文件内容?
- ios - FocusedValue / FocusedBinding 在 iPad 上不起作用
- react-native - 在 React Native 中调整图标 FontAwesome5 的大小
- c - C argp : 处理选项需要
- c++ - 在数组c ++上制作6位引脚
- imagemagick-convert - 试图转换/展平/合并来自不同文件夹的所有图像。图像魔术
- coldfusion - CreateObject() 无法解析 CF2018 中的 CFC 路径
- javascript - Webpack、导出和 ES 模块:ReferenceError:模块未在 ES 模块范围内定义
- arrays - 如何在Mongodb中获取过滤后数组的大小