MarkLogic アプリ開発チュートリアル：特定のディレクトリ内の文書を全て削除する


NoSQL製品であるMarkLogicのチュートリアル第４回です。

第２回の「[XMLから読み込んだ内容をデータベースに書き込む](http://qiita.com/makopo/items/088cd4253d11563d7b0f)」を繰り返して実行していると、どんどんデータベースにドキュメントが溜まっていきます。今回は、まとめて消すプログラムを書いてみます。検索と削除を組み合わせたサンプルになっています。

## 準備

「[XMLから読み込んだ内容をデータベースに書き込む](http://qiita.com/makopo/items/088cd4253d11563d7b0f)」で何個かドキュメントを作っておきます。

## プログラム

```java:DeleteDocuments.java
    public static void main(String[] args) {

        // データベースクライアントの取得
        DatabaseClient client = DatabaseClientFactory.newClient(
                "localhost", 8000, "aaa", "pass", DatabaseClientFactory.Authentication.DIGEST
        );

        // DocumentManagerの取得
        XMLDocumentManager docMgr = client.newXMLDocumentManager();

        // /my/docs/内の全ての文書を検索
        QueryManager queryMgr = client.newQueryManager();
        StructuredQueryBuilder sb = queryMgr.newStructuredQueryBuilder();
        StructuredQueryDefinition criteria = sb.directory(true, "/my/docs/");
        SearchHandle results = queryMgr.search(criteria, new SearchHandle());

        // ヒットした1件1件に対する処理
        MatchDocumentSummary[] summaries = results.getMatchResults();
        for (MatchDocumentSummary summary : summaries ) {
            // URIを取得し、ドキュメントを削除
            docMgr.delete(summary.getUri());
        }

        // データベースクライアントの解放
        client.release();

    }
```

## 実行

ビルドして実行します。

```shell-session
23:30:04.105 [main] DEBUG c.m.client.DatabaseClientFactory - Creating new database client for server at localhost:8000
23:30:04.134 [main] DEBUG c.m.client.impl.JerseyServices - Connecting to localhost at 8000 as aaa
23:30:04.521 [main] DEBUG c.m.client.impl.JerseyServices - Searching for structure <query xmlns="http://marklogic.com/appservices/search" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:search="http://marklogic.com/appservices/search" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><directory-query><uri>/my/docs/</uri><infinite>true</infinite></directory-query></query>
23:30:04.692 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/9674968096817240700.xml
23:30:04.692 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/9674968096817240700.xml in transaction null
23:30:05.137 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/3193325293466088864.xml
23:30:05.137 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/3193325293466088864.xml in transaction null
23:30:05.142 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/4030472387716434976.xml
23:30:05.142 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/4030472387716434976.xml in transaction null
23:30:05.147 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/1805593962858998223.xml
23:30:05.147 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/1805593962858998223.xml in transaction null
23:30:05.152 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/13495358755264465654.xml
23:30:05.152 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/13495358755264465654.xml in transaction null
23:30:05.158 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/11394717953098440825.xml
23:30:05.158 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/11394717953098440825.xml in transaction null
23:30:05.178 [main] INFO  c.m.client.impl.DocumentManagerImpl - Deleting /my/docs/12606665625232933102.xml
23:30:05.178 [main] DEBUG c.m.client.impl.JerseyServices - Deleting /my/docs/12606665625232933102.xml in transaction null
23:30:05.183 [main] INFO  c.m.client.impl.DatabaseClientImpl - Releasing connection
23:30:05.183 [main] DEBUG c.m.client.impl.JerseyServices - Releasing connection
```

クエリコンソールで確認します。/my/docs/が先頭に付くファイルは全て消えています。