3

私は Web クローラーに取り組んでおり、Raven に保存される結果は、Web サイトの大きさによって異なる場合があります。「セッションあたりのサーバーは 30 に制限されています」を超えた特定の結果を削除しようとしていますが、1,000 の制限まで拡張したくありませんが、一括削除したいと考えています。

私が書いた、うまくいくはずのコードは

    public void DeleteCrawledLinks(string baseUrl)
    {

        DocumentStore().DatabaseCommands.DeleteByIndex(
            "Auto/UrlContainers/ByBaseUrlAndUrl",
            new IndexQuery
            {
                Query = "BaseUrl:" + baseUrl // where BaseUrl contains baseUrl
            }, allowStale: false);
     }

この例の Raven の BaseUrl を "BaseUrl": "http://localhost:2125/" と呼びましょう。baseUrl は同じです。delete 関数を実行すると、このエラー メッセージが表示されます。

URL: "/bulk_docs/Auto/UrlContainers/ByBaseUrlAndUrl?query=BaseUrl%253Ahttp%253A%252F%252Flocalhost%253A2125%252F&start=0&pageSize=128&aggregation=None&allowStale=False"

System.ArgumentException: フィールド 'http' はインデックス化されていないため、インデックス化されていないフィールドに対してクエリを実行できません

私のクエリの : が原因ですか、これを回避する方法はありますか、それとも別の方法がありますか? クロールするサイトには 1,000 件を超える結果が返される可能性があるため、制限を延長したくありません。

4

1 に答える 1

3

クエリを自分で作成する場合は、次のように検索語をエスケープします。

Query = "BaseUrl:" + RavenQuery.Escape(baseUrl)
于 2012-12-12T18:37:18.483 に答える