Повышение результатов на основе логического поля - PullRequest
0 голосов
/ 01 октября 2019

У меня есть тонны статей в разных магазинах. Некоторые из этих статей являются статьями собственного бренда и должны оцениваться выше, чем другие статьи в моих результатах поискаasticsearch (однако должны быть показаны как собственный, так и не собственный бренд.)

Я уже пробовал разные подходы с field_value_factor, но это не 'Похоже, что это хорошо с булевым полем. Я также попробовал подходящее решение в Повышение результата эластичного поиска на основе значения логического поля , но это не сработало для меня. Результаты с подходом ownBrand были еще ниже, чем у многих статей, не принадлежащих OwnBrand.

Индекс:

schema: {
    articleId: { type: 'text' },
    brandId: { type: 'text' },
    brandName: { type: 'text' },
    countryId: { type: 'text' },
    description: { type: 'text' },
    isOwnBrand: { type: 'boolean' },
    stores: { type: 'keyword' },
  },
};

Запрос:

      query: {
          function_score: {
            query: {
              bool: {
                must: {
                  multi_match: {
                    query: searchterm,
                    fields: ['name^5', 'name.ngram'],
                    fuzziness: 'auto',
                    prefix_length: 2,
                  },
                },
                filter: [{ term: { stores: storeId } }],
              },
            },
          },
        },
      };

Результат долженРасставьте приоритеты полей с isOwnBrand = true вверху, в то же время показывая соответствующие статьи с isOwnBrand = false ниже.

Я немного растерялся, как с этим справиться.

1 Ответ

0 голосов
/ 01 октября 2019

Вы можете использовать Коэффициент поля значения . Ниже должно хорошо работать даже на булевом поле. попробуйте

{
    "query": {
        "function_score": {
           "query" {...}, #your normal query as in question
            #add below after query
            "field_value_factor": {
                "field": "isOwnBrand",
                "factor": 1.2,
                "modifier": "sqrt",
                "missing": 1
            }
        }
    }
}

Одно предупреждение, о котором я могу подумать, но не проверял - поскольку false равно 0, приведенный выше скрипт будет сбрасывать все документы со значения false до 0, что приводит к ошибкамскоринг. Вы можете либо сделать isOwnBrand числовым полем и установить приоритет, начиная с 1

ИЛИ вы также можете использовать script_score

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...