我有这些电子邮件:“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” } ] } }
答案 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类型,可以排序。