Apache Solr

 

solrjでランダムソートする

solrjでラムダムソートします。ランダムソートはsolrの標準機能で実装可能です。新着データをランダム表示する際等に使いましょう!

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

ランダムソートはsolrの標準機能として組み込まれています。

機能的にはdynamic fieldを利用してランダムソートを実装します。

<schema name="hoge" version="1.5">
    <types>
        <fieldType name="random" class="solr.RandomSortField" indexed="true" />
    </types>
    <fields>
        <dynamicField name="random_*" type="random" />
    </fields>
</schema>

この2つの設定が必要です。初期状態で両方設定されているので、特に設定は不要かと思います。

public SolrSearchResult<AddressDocument> randomSort() {
    // 東京都
    SolrQuery solrQuery = new SolrWhere(andClause(and(AddressDocumentNames.PREF_CD, 13))).toQuery();
    // 1丁目から始まる
    String fq = new SolrWhere(andClause(and(AddressDocumentNames.VILLAGE_NAME, "1*"))).toString();
    solrQuery.setFilterQueries(fq);
    solrQuery.setRows(100);
    // ランダムソートを設定
    SecureRandom sr = new SecureRandom();
    solrQuery.setSortField("random_" + sr.nextInt(), SolrQuery.ORDER.asc);
    return getResultList(solrQuery, AddressDocument.class);
}

クエリ的にはschema.xmlで設定したdynamic fieldを利用します。

random_123456789」といった感じなるよう文字列を生成します。

この乱数部分がシード値にあたります。

サンプルではSecureRandomを使っているのは、パフォーマンスよりランダム性を重視しているためです。

◯ 広告