I work with Java and SolrJ on Eclipse. How can I sort SolrQuery results by occluding values ββin a specific field? For example, when I look at the first n articles ( docType = 0 ) of a specific author, I want to sort the query results by the frequency of values ββin the journal_facet field (type String).
If a specific author of X wrote:
- 2 articles (a0, a1) in a journal named J0
- 3 articles (a2, a3, a4) in a journal named J1
- 1 article (a5) in the journal J2
The order should be a2, a3, a4, a0, a1, a5, and I want to show the results as follows
<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 request
SolrServer 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 the following fields and types are
<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" /> <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> </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" /> </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>
Many thanks for your help.
source share