Фильтрация и обработка многозначных полей в SOLR

#solr #faceted-search

#solr #фасетный поиск

Вопрос:

Я использую SOLR 4 и имею схему документа, содержащую многозначное поле. Схема выглядит примерно так:

 ... some fields
"foo": [
    "aaa",
    "abb",
    "baa",
    "bbb"
],
... more fields
  

Я хотел бы получить количество всех документов с каждым значением переменной «foo»:

  • aaa был в списке foo из 45 документов
  • abb был в списке foo из 76 документов
  • baa был в списке foo из 44 документов
  • bbb был в списке foo из 52 документов

Чтобы немного усложнить задачу, я хотел бы отфильтровать, какие фасеты возвращаются (в приведенном выше примере, скажем, только те, которые начинаются с «a»):

  • aaa был в списке foo из 23 документов
  • abb был в списке foo из 76 документов

Я думаю, что мне нужно как-то отфильтровать фасеты, но я не знаю, с чего начать. Предложения приветствуются!

Ответ №1:

Параметр facet.prefix ограничивает условия, по которым выполняется фасетирование, теми, которые начинаются с заданного строкового префикса.

 q=*
amp;facet=true
amp;facet.field=foo
amp;facet.prefix=a
  

Приведенный выше запрос отфильтрует фасеты и вернет вам только те, которые начинаются с a .

Ответ №2:

Я думаю, что свертывание полей может быть полезным:

https://cwiki.apache.org/confluence/display/solr/Result Grouping

Комментарии:

1. Не могли бы вы, пожалуйста, немного уточнить? В ссылке в вашем ответе указано «Поле, на которое сворачивается. Поле должно быть однозначной строкой, Int или Float «. Есть ли другой способ сделать это для многозначных полей?