0

我有这些电子邮件:“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">
      <分析器类型="索引">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </分析仪>
      <分析器类型="查询">
        <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"/>
      </分析仪>
    </fieldType>

将字段名称更改为“电子邮件”后:

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

4

1 回答 1

0

您需要更改查询以按名为email而不是advertiser_email_t. 就像是

q=*:*&sort=email+asc

根据您发布的回复,您尝试按名为advertiser_email_t. 该字段也是text_general您提供的类型。该字段类型被标记化并通过映射的同义词接收额外的标记。

在阅读有关排序的参考资料时,您会发现这不起作用

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

  • 该字段是未标记的(即该字段没有分析器并且其内容已被解析为标记,这会导致排序不一致),或者

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

但是您命名的字段email很好。它是可排序的字符串类型。

于 2013-11-07T09:41:47.143 回答