ElasticSearch。如何获得命中的“ _score”字段?

时间:2019-07-19 07:38:33

标签: javascript node.js elasticsearch

我有以下代码:

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对匹配进行排序?

1 个答案:

答案 0 :(得分:0)

您可以使用布尔查询基于_sort进行排序

AddApplicationPart

布尔的详细信息可以找到here