Solr排序电子邮件字段

7lrncoxx  于 2022-09-27  发布在  Solr
关注(0)|答案(1)|浏览(219)

我有这些电子邮件:“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“}]}}

6vl6ewon

6vl6ewon1#

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

q=*:*&sort=email+asc

根据您发布的回复,您尝试按名为advertiser_email_t的字段进行排序。此字段的类型为您还提供的text_general。该字段类型被标记化,并通过Map的同义词接收其他标记。
在阅读有关排序的参考资料时,您可以看到这是行不通的
Solr可以根据文档分数或具有单个值的任何索引字段的值(即schema.xml中属性包括multiValued=“false”和indexed=“true”的任何字段)对查询响应进行排序,前提是:

  • 字段未标记化(即,字段没有分析器,其内容已被解析为标记,这将导致排序不一致),或
  • 该字段使用仅生成单个术语的分析器(例如KeywordTokenizer)。

但名为email的字段可以。它是可排序的字符串类型。

相关问题