簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM