Множественные запросы соответствия elasticsearch

Скажем, у меня есть документ с 3 текстовыми полями: field_a, field_b и field_c. Можно ли сделать один запрос, чтобы у нас были результаты в таком порядке:

  1. 'совпадение' в field_a
  2. 'совпадение' в field_b
  3. 'совпадение' в field_c

Результаты 'mutli_match' могут иметь результаты из разных полей, смешанные вместе в порядке результатов, мне нужны любые и все результаты из field_a, затем любые и все результаты из field_b и так далее.


person taman    schedule 18.01.2019    source источник


Ответы (1)


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

Запрос с несколькими совпадениями имеет прекрасную возможность повысьте эффективность своих полей. Например.

"query": {
    "multi_match" : {
      "query" : "this is a test",
      "fields" : [ "field_a^1000", "field_b^10", "field_c" ] 
    }
  }

Знак ^ является знаком повышения, который будет умножать количество очков совпадения в этом поле на значение - 1000 в случае field_a

Тем не менее, я бы рекомендовал избегать такого поведения в целом, поскольку:

  • Трудно контролировать эти повышающие значения
  • В некоторых случаях он может вести себя не так, как ожидалось (представьте, что вы получаете 1000 баллов в field_b)

  • Если у вас будет много совпадений, это делает всю идею соответствия field_c устаревшей, поскольку ни один пользователь не будет прокручивать результаты поиска так далеко.

person Mysterion    schedule 19.01.2019