简体   繁体   English

使用多个字段对Solr搜索结果进行排序

[英]Sorting solr search results using multiple fields

I have five field in solr document . 我在solr文件中有五个领域。

 startDate---> Date type
 endDate----> Date type
 name -----> string type
 location ----> string type
 publishDate ----> Date type

Now I want to sort this doc in this order 现在我要按此顺序对该文档进行排序

  1. first i want to on the base of startDate 首先我想在startDate的基础上
  2. if startdate is same then endate 如果开始日期相同,则结束
  3. if start and end date is same then name 如果开始日期和结束日期相同,则命名
  4. if start,end,name are same then location and so on.... 如果开始,结束,名称相同,则位置相同,依此类推。

I am using solrj api and for this i am using 我正在使用solrj api,为此我正在使用

          solrQuery.setSort("startdate", SolrQuery.ORDER.asc)
            solrQuery.addSort("enddate", SolrQuery.ORDER.asc)
            solrQuery.addSort("name", SolrQuery.ORDER.asc)
            solrQuery.addSort("location", SolrQuery.ORDER.asc)
            solrQuery.addSort("publish_date", SolrQuery.ORDER.asc) 

But it is not working pls help 但这不起作用请帮助

       schema.xml:
        <field name="startdate" type="tdate" 
        indexed="true" stored="true"/>
        <field name="enddate" type="tdate" indexed="true" stored="true"/>
        <field name="publish_date" type="tdate" indexed="true" 
        stored="true"/>
        <field name="location" type="text_general_edge_nGram" 
        indexed="true" stored="true"/>

        <fieldType name="tdate" class="solr.TrieDateField" 
        precisionStep="6" positionIncrementGap="0"/>
         <fieldType name="text_general_edge_nGram" class="solr.TextField" 
         positionIncrementGap="100">
                <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" 
            words="stopwords.txt" />
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" 
             maxGramSize="30" side="front"    luceneMatchVersion="4.3"/>

              </analyzer>
              <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" 
             words="stopwords.txt" />
            <filter class="solr.SynonymFilterFactory" 
            synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
              </analyzer>
            </fieldType>

I think it comes from your tokenizer, that produce a multiple valued field. 我认为它来自您的令牌生成器,产生了多值字段。 Unless you use an analyzer that produces a single term you wont be able to sort on that field. 除非您使用产生单个术语的分析器,否则您将无法对该字段进行排序。

https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

http://atpatil.blogspot.fr/2014/07/Solr-sort-strings.html http://atpatil.blogspot.fr/2014/07/Solr-sort-strings.html

difference between StandardTokenizerFactory and KeywordTokenizerFactory in SoLR SoLR中StandardTokenizerFactory和KeywordTokenizerFactory之间的区别

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM