You can't use extrac parameter to view.
viewは静的にインデックスを作るので動的にパラメータは渡せない仕様。それだったらN1QLを検討すべきです。というかその一択。
https://forums.couchbase.com/t/parameterize-view-couchbase-lite/14984
[java]
view.setMap(new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
if(document.get("type").equals(the_type_of_my_model)) {
emitter.emit(document.get("_id"), null);
}
}
}, "1");
[/java]
[javascript]
function (doc, meta, pattern) {
//var pattern = "^miso.*$";
myregex = new RegExp(pattern);
var match = meta.id.match(myregex);
if (match) {
//emit(match[0], null);
emit(meta.id, null);
}
}
[/javascript]
この投稿者も諦めてN1QLを使うと言及している
View と GSI (Global Secondary Index)つまりはN1QLの比較
https://developer.couchbase.com/documentation/server/current/architecture/gsi-versus-views.html
今回は私は、primary indexをregexで検索するためだけに使うので、メモリの最適化などはやらなくて済むと思っているが
必要な場合はこの記事を参考にしたい
N1QLの始め方
インデクスが貼れてないと以下のようにエラーが出るので
[bash]
[
{
"code": 4000,
"msg": "No index available on keyspace default that matches your query. Use CREATE INDEX or CREATE PRIMARY INDEX to create an index, or check that your expected index is online.",
"query_from_user": "SELECT Meta(default).id FROM `default` ORDER BY ts DESC LIMIT 100"
}
]
[/bash]
このように最低限のprimary indexをはってみよう
[bash]
CREATE PRIMARY INDEX ON `default`
[/bash]
そして、最後に今回の目的の特定のregexパターンでクエリーを叩いて結果が正しいことを確認してみよう
[bash]
SELECT Meta(default).id FROM `default` WHERE META(`default`).id LIKE "miso%" ORDER BY ts DESC LIMIT 100
[/bash]