Как я могу получить размер результатов Solr Facet?

В моей схеме есть многозначное поле с именем XXX. И в моем Solr может быть больше 10 000 документов, я хочу получить, сколько значений существует в XXX без какого-либо дублирования.

На данный момент я использую facet.field=XXX&facet.limit=-1, чтобы получить размер результатов фасета. На это уходит много времени, а иногда и происходит тайм-аут чтения.

То, что я хочу для фасетных результатов, - это только «размер», меня не волнует содержимое.

Кстати, я использую Solr 5.0, есть ли другое лучшее решение для удовлетворения моих требований?


person user1416312    schedule 14.05.2015    source источник
comment
Я уже пытался использовать статистику, но это многозначное поле, так что это не имеет смысла.   -  person user1416312    schedule 14.05.2015
comment
В отличие от форумов, мы не используем слова «Спасибо» или «Любая помощь приветствуется» или подписи на Stack Overflow. См. раздел Должен ли быть "Привет", "спасибо" слоганов и приветствий удалить из постов?. Кстати, это заранее спасибо, а не спасибо заранее.   -  person John Saunders    schedule 15.05.2015


Ответы (1)


Индекс поддерживает список уникальных терминов, поскольку именно так работает инвертированный индекс. Это также очень быстро вычисляется и возвращается, в отличие от огранки. Если ваши ценности представляют собой отдельные термины, то это может быть способом получить то, что вы хотите. Есть способ получить уникальные термины, если в вашем solrconfig.xml включен компонент Термины. Например:

http://localhost:8983/solr/corename/terms?q=*%3A*&wt=json&indent=true&terms=true&terms.fl=XXX

Вернет список всех уникальных терминов и их количество:

{
  "responseHeader":{
  "status":0,
  "QTime":0},
  "terms":{
    "XXX":[
    "John Backus",3,
    "Ada Lovelace",3,
    "Charles Babbage",2,
    "John Mauchly",1,
    "Alan Turing",1
    ]
  }
}

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

Посетите https://wiki.apache.org/solr/TermsComponent, чтобы узнать подробности об API.

person Fuu    schedule 14.05.2015