Solr排序电子邮件字段

时间:2013-11-07 03:50:35

标签: email sorting solr

我有这些电子邮件:“jack@gmail.com”,“jack1@gmail.com”。 我想对它们进行排序

Solr将返回以下结果:

  

jack1@gmail.com
  jack@gmail.com

我认为正确的排序结果应该是:

  

jack@gmail.com
  jack1@gmail.com

这样的配置:

 <field name="email" type="string" indexed="true" stored="true"/>

任何人都可以提供帮助吗?

以下是solr回复:

{ "responseHeader":{ "status":0, "QTime":0, "params":{ "sort":"advertiser_email_t asc", "indent":"true", "q":":", "wt":"json", "response":{"numFound":3,"start":0,"docs":[ { "advertiser_email_t":"ad111@qq.com", "id":"01df4dea-beb3-46fb-940b-78eda109503c" }, { "advertiser_email_t":"ad@qq.com", "id":"935de002-10e0-437f-a571-e74bb6646228" }, { "advertiser_email_t":"wang@qq.com", "id":"2a80935e-e520-4c3e-8d56-8e7b1096b372"}] } } 

这是字段定义:

  

<dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>

这是字段类型定义:

  

<fieldType name="text_general" 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"/>
      </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>

将字段名称更改为“email”后:

  

{     “responseHeader”:{       “状态”:0,       “QTime”:0,       “params”:{         “排序”:“电子邮件asc”,         “缩进”:“真实”,         “q”:“”,         “_”:“1383822359034”,         “wt”:“json”       }     },     “回应”:{       “numFound”:2,       “开始”:0,       “docs”:[         {           “email”:“ad1@qq.com”,           “id”:“00000000-0000-0000-0000-000000000002”         },         {           “email”:“ad @ qq.com”,           “id”:“00000000-0000-0000-0000-000000000001”         }       ]     }   }

1 个答案:

答案 0 :(得分:0)

您需要更改查询以按名为email的字段而不是advertiser_email_t进行排序。像

这样的东西
q=*:*&sort=email+asc

根据您发布的回复,您尝试按名为advertiser_email_t的字段进行排序。此字段属于您提供的text_general类型。该字段类型被标记化,并通过映射的同义词接收其他标记。

the reference about sorting中阅读时,您会发现这不起作用

  
    

Solr可以根据文档分数或具有单个值的任何索引字段的值(即schema.xml中的属性包括multiValued =“false”和indexed =“true”的任何字段)对查询响应进行排序,前提是的是:

         
        
  • 该字段是非标记化的(也就是说,该字段没有分析器,其内容已被解析为令牌,这会使排序不一致),或者

  •     
  • 该字段使用仅生成单个术语的分析器(例如KeywordTokenizer)。

  •     
  

但您的email字段很好。它是string类型,可以排序。