Solr Faceting на нескольких объединенных полях - PullRequest
2 голосов
/ 01 марта 2012

Мне нужен способ получить фасеты для двух комбинированных имен полей.Чтобы показать вам, что я имею в виду, посмотрите на запрос таким, какой он есть сейчас:

{
  "responseHeader":{
    "status":0,
    "QTime":16,
    "params":{
      "facet":"true",
      "indent":"true",
      "q":"productId:(1 OR 2 OR 3 OR 4)",
      "facet.field":["productMetaType",
        "productId"],
      "rows":"10"}},
  "response":{"numFound":4,"start":0,"docs":[
      {
        "productId":1,
        "productMetaType":"PRIMARY_PHOTO",
        "url":"1_PRIM.JPG"},
      {
        "productId":1,
        "productMetaType":"OTHER_PHOTO",
        "url":"1_1.JPG"},
      {
        "productId":1,
        "productMetaType":"OTHER_PHOTO",
        "url":"1_2.JPG"},
      {
        "productId":2,
        "productMetaType":"OTHER_PHOTO",
        "url":"2_1.JPG"}]
  },
  "facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "productMetaType":[
        "PRIMARY_PHOTO",1,
        "OTHER_PHOTO",3],
      "productId":[
        "1",3,
        "2",1]},
    "facet_dates":{},
    "facet_ranges":{}
    }
}

У меня есть два поля фасета, productMetaType и productId.Что мне нужно сделать, так это как-то объединить эти поля, чтобы я получил данные примерно так:

1_PRIMARY_PHOTO, 1,
1_OTHER_PHOTO, 2, 
2_PRIMARY_PHOTO, 0,
2_OTHER_PHOTO, 1

Делает ли это функциональность сводки?К сожалению, мы работаем с Solr 3.1, поэтому pivot недоступен, но если это единственный способ сделать это, у меня могут быть боеприпасы для обновления.

Единственное, о чем я мог подумать, этонекоторые, как конкатенация имен полей.Я новичок в Solr и не знаю, что это возможно.Любой совет или помощь приветствуется.Спасибо за ваше время.

1 Ответ

4 голосов
/ 02 марта 2012

Да, Pivot будет работать, но, как вы заметили, эта функция доступна только в стволе Solr.

Ваша идея объединить оба поля тоже подойдет. На самом деле, если ваши поля имеют ограниченное количество значений, самый простой и гибкий способ сделать это - использовать фасетные запросы :

  • productId: 1 И productMetaType: PRIMARY_PHOTO
  • productId: 2 И productMetaType: OTHER_PHOTO
  • productId: 1 И productMetaType: OTHER_PHOTO
  • productId: 2 И productMetaType: PRIMARY_PHOTO

В противном случае, просто создайте новое поле в вашем Solr schema.xml со строковым типом, воссоздайте свой индекс, добавив ваши документы, как и ранее, но с этим новым полем (которое вы можете создавать по своему усмотрению, используя «_» разделитель между двумя значениями поля будет работать идеально).

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