我有这些电子邮件:“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”:{“status”:0,“QTime”:0;“params”:{“sort”:“email asc”,“indent”:“true”,“q”:“:”,“_”:“1383822359034”,“wt”:“json”},“respond”:{:“numFound”:2,“start”:0、“docs”:[{“email”:“ad1@qq.com“,”id“:”00000000-0000-0000-0000-00000000002“},{”email“:”ad@qq.com“,”id“:”00000000-0000-0000-0000-00000000001“}]}}
1条答案
按热度按时间6vl6ewon1#
您需要将查询更改为按名为
email
的字段而不是advertiser_email_t
进行排序。有点像根据您发布的回复,您尝试按名为
advertiser_email_t
的字段进行排序。此字段的类型为您还提供的text_general
。该字段类型被标记化,并通过Map的同义词接收其他标记。在阅读有关排序的参考资料时,您可以看到这是行不通的
Solr可以根据文档分数或具有单个值的任何索引字段的值(即schema.xml中属性包括multiValued=“false”和indexed=“true”的任何字段)对查询响应进行排序,前提是:
但名为
email
的字段可以。它是可排序的字符串类型。