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
                                          

Reply via email to