3

レコードをランク​​付けするという考えにかなり取り組んだ後、私は最終的にドキュメントの数値ベースのスコアに落ち着きました。これは、これらのスコアに基づいてソートするために発行するものです。

これらの数字には意味があり、最初の 2 桁が特定のタイプのドキュメントを表します。

したがって、スコアに基づいてソートされたタイプ 22 のドキュメントを取得するには、開始キーが 220000 で終了キーが 229999 のビューをクエリするだけです。

これはすべてうまく機能します。URLの書き換えを使用しようとすると問題が発生します。

私は基本的にルートを変更しようとしています:

/_rewrite/rankings/{doctype}

/_list/rankings?startkey=xx0000&endkeyxx9999

xx は {doctype} です

私の問題は、書き換えルールを指定することです:

[
    { "from":"rankings/:doctype",
      "to":"_list/rankings",
      "query": ??? //what will this be?
]
  • それぞれ 0000 と 9999 を追加して開始キーと終了キーを作成するにはどうすればよいですか?

  • 数値を指定するにはどうすればよいですか? プレースホルダー ":doctype" を使用すると、数値型ではなく文字列型になるため、きれいな URL を変更して開始キーと終了キーの両方を入力したとしても、クエリが失敗します。

  • リストビューで結果をフィルタリングすることで問題を回避しました(getRow()から興味のないドキュメントを無視します)。

私のソート戦略についても自由にコメントしてください..他の人がcouchdbでソートとスライスの問題をどのように解決したか知りたいです

4

1 に答える 1

1

解決

まず、タイプスコアを連結するのではなく、配列で別々に発行する必要があります。

emit([doc.type, doc.score], doc);

次に、このように書き換えることができます

[
  {
    "from"  : "rankings/:doctype",
    "to"    : "_list/rankings/rankings",
    "query" : {
      "startkey" : [":doctype", 0],
      "endkey"   : [":doctype", 9999]
    },
    "formats": {
      "doctype" : "int"
    }
  }
]

CouchDB 1.1.1 でテストしたところ、動作しました。

参照

関連するドキュメントは、JIRA のこの問題に埋もれています: COUCHDB-1074

ご覧のとおり、この問題は 2011 年 4 月に解決されたため、CouchDB 1.0.3 以降で動作するはずです。

于 2012-01-11T06:01:43.667 に答える