繁体   English   中英

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

[英]Sorting solr search results using multiple fields

我在solr文件中有五个领域。

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

现在我要按此顺序对该文档进行排序

  1. 首先我想在startDate的基础上
  2. 如果开始日期相同,则结束
  3. 如果开始日期和结束日期相同,则命名
  4. 如果开始,结束,名称相同,则位置相同,依此类推。

我正在使用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) 

但这不起作用请帮助

       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>

我认为它来自您的令牌生成器,产生了多值字段。 除非您使用产生单个术语的分析器,否则您将无法对该字段进行排序。

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

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

SoLR中StandardTokenizerFactory和KeywordTokenizerFactory之间的区别

暂无
暂无

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

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