Sounds like faceting on a field.
Or, how is it not like faceting?
-- Jack Krupansky
-----Original Message-----
From: Luca Incrocci
Sent: Thursday, August 08, 2013 8:40 AM
To: solr-user@lucene.apache.org
Subject: how to sort by frequency of values on a specific field?
I'm working with Java and SolrJ on Eclipse. How can I sort the results of a
SolrQuery by occurrency of values on a certain field? For example, when I
search top n articles (docType=0) of a particular author I want to sort
query results by frequency of values in the journal_facet field (type
String).If a certain author X has written:2 articles (a0, a1) in the journal
named J03 articles (a2, a3, a4) in the journal named J11 article (a5) in the
journal named J2Order has to be a2, a3, a4, a0, a1, a5 and I want to show
results in the following way<doc>
<arr name="author">
<str>X</str>
</arr>
<str name="title">a2</str>
<str name="journal">J1</str>
</doc>
<doc>
<arr name="author">
<str>X</str>
</arr>
<str name="title">a3</str>
<str name="journal">J1</str>
</doc>
<doc>
<arr name="author">
<str>X</str>
</arr>
<str name="title">a4</str>
<str name="journal">J1</str>
</doc>
<doc>
<arr name="author">
<str>X</str>
</arr>
<str name="title">a0</str>
<str name="journal">J0</str>
</doc>
<doc>
<arr name="author">
<str>X</str>
</arr>
<str name="title">a1</str>
<str name="journal">J0</str>
</doc>
<doc>
<arr name="author">
<str>X</str>
</arr>
<str name="title">a5</str>
<str name="journal">J2</str>
</doc>My query isSolrServer solrServer = new HttpSolrServer(urlString);
SolrQuery query = new SolrQuery();
query.set("q", "docType:0);
query.set("fq", "author:X");
query.set("fl", "author, title, journal");
query.setRows(n);
...
QueryResponse response = solrServer.query(query);
SolrDocumentList results = response.getResults();and in my Solr schema.xml
there are the following fields and types<types>
...
<fieldType name="text_title" class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<charFilter class="solr.HTMLStripCharFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1"
catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"
stemEnglishPossessive="1" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2"
maxGramSize="15" side="front"/>
<filter class="solr.KStemFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"
stemEnglishPossessive="1" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.KStemFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
</fieldType>
<fieldType name="text_name" class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<charFilter class="solr.HTMLStripCharFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1"
catenateNumbers="1" catenateAll="1" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<!-- n-grams utile per la ricerca per prefisso" -->
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2"
maxGramSize="15" side="front"/>
<!-- <filter
class="solr.RemoveDuplicatesTokenFilterFactory"/> -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<!-- <filter
class="solr.RemoveDuplicatesTokenFilterFactory"/> -->
</analyzer>
</fieldType>
</types>
<fields>
<field name="docType" type="tint" indexed="true" stored="true"
multiValued="false" required="true" />
<field name="key" type="string" indexed="true" stored="true"
multiValued="false" required="true" />
<field name="mdate" type="date" indexed="true" stored="true"
multiValued="false" required="true" />
...
<field name="author" type="text_name" indexed="true" stored="true"
multiValued="true" />
...
<field name="journal" type="text_title" indexed="true" stored="true"
multiValued="false" />
<field name="title" type="text_title" indexed="true" stored="true"
multiValued="false" />
...
<field name="journal_facet" type="string" indexed="true" stored="true"
multiValued="false" />
...
<copyField dest="journal_facet" source="journal" />
...
</fields>Thanks a lot for your help,
Luca