Предотвратить заполнение ключевого слова - PullRequest
0 голосов
/ 19 сентября 2019

Я использую ES 7.3.У меня есть индекс продукта с названиями, деталями, номерами моделей и т. Д. У меня возникают проблемы с заполнением ключевыми словами, поскольку некоторые продукты могут содержать одно и то же слово, часть или номер модели несколько раз по всему документу.

ДляНапример, номер модели может присутствовать дважды в заголовке, а также в поле номера модели.Некоторые продукты могут включать номер модели только в название, а не в поля номера модели.Эти продукты имеют трудности с ранжированием из-за проблемы.Как я могу предотвратить этот тип заполнения ключевых слов?Вот мой код.

Поля:

fields = [
          'name^10','name.ngram',
          'part_number^10',


          'mod_name^5', 

          'model_number^5', 

          'brand^10',
          'category^5',
          'product_type^5',
          'search_variations^1'                  
         ]  

fuzzy_fields = [
         'name',
          'part_number',
          'mod_name', 
          'model_number', 
          'brand',
          'category',
          'product_type',
          'search_variations'                  
         ]

Запрос:

{
         explain: true,
         query:{
           function_score: { 
              "query": {
                "bool": {
                  "should": 
                    [{
                      multi_match:{
                         fields: fields,
                         type: "most_fields", 
                         query: "#{query}"
                       }
                    },
                    {
                      multi_match:{
                         fields: fuzzy_fields,
                         type: "most_fields", 
                         fuzziness: "AUTO",
                         query: "#{query}"
                       }
                    }],
                  "filter": {
                    "bool": { 
                      "must": filters
                    }
                  }
               }
             },field_value_factor:{
                    field: "popularity",
                    modifier: "log1p",
                    factor: 5

                 },
                 boost_mode: "sum"
             }
       },highlight: {
            fields: {
              :"*" => {}
            }
          },
        aggs: {categories: { terms: { field: "category.raw"} }} 

      }

ОБНОВЛЕНИЕ

Добавление фильтра unique к моему отображению делаетпредотвратить дублирование значений, совпадающих в одном поле, но не в нескольких полях, что мне и нужно.

1 Ответ

0 голосов
/ 22 сентября 2019

Я думаю, что в вашем запросе вам нужна опция best_fields в запросе multi_match :

best_fields использует оценку single поле наилучшего соответствия

Таким образом, учитывается только наилучшее поле, и если в некоторых документах есть совпадение в нескольких полях, которое не смещает счет.

...