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">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </アナライザー>
      <analyzer type="クエリ">
        <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>

フィールド名を「email」に変更した後:

{ "responseHeader": { "status": 0, "QTime": 0, "params": { "sort": "email asc", "indent": "true", "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 に答える