I think I have most of querying / storing / patching figured out, but when I threw a few tens of thousands of records into my dev db and queried against it, I found what I believe to be a bug (please let me know if it is not.)
I am running into this when querying for a value that contains an ampersand. It looks like the parser is treating the ampersand as a non-escapable character (the query is Sku:*\|CNVAIS\-P\&H' but it is parsed as Sku:*\|CNVAIS\-P\')
2013-10-28 12:49:38,326 [3] DEBUG Raven.Client.Document.SessionOperations.QueryOperation [(null)] Executing query 'Vendor:STC AND Sku:*\|CNVAIS\-P\&H' on index 'dynamic/Products' in '
http://localhost:4000 (DB: ProductManagementDEV);ProductManagementDEV'
2013-10-28 12:49:38,334 [3] ERROR Avenius.DataFeed.ConsoleApp.Program [(null)] - Exception:
System.InvalidOperationException: Url: "/indexes/dynamic/Products?&query=Vendor%3ASTC%20AND%20Sku%3A*%5C%7CCNVAIS%5C-P%5C%26H&pageSize=1&cutOff=2013-10-28T16%3A49%3A38.3268847Z"
Lucene.Net.QueryParsers.ParseException: Could not parse: 'Vendor:STC AND Sku:*\|CNVAIS\-P\' ---> Lucene.Net.QueryParsers.ParseException: Cannot parse 'Vendor:STC AND Sku:*\|CNVAIS\-P\': Lexical error at line 1, column 33. Encountered: <EOF> after : "" ---> Lucene.Net.QueryParsers.TokenMgrError: Lexical error at line 1, column 33. Encountered: <EOF> after : ""
at Lucene.Net.QueryParsers.QueryParserTokenManager.GetNextToken() in c:\Work\
lucene.net\src\core\QueryParser\QueryParserTokenManager.cs:line 1386
at Lucene.Net.QueryParsers.QueryParser.Jj_ntk() in c:\Work\
lucene.net\src\core\QueryParser\QueryParser.cs:line 1929
at Lucene.Net.QueryParsers.QueryParser.Term(String field) in c:\Work\
lucene.net\src\core\QueryParser\QueryParser.cs:line 1461
at Lucene.Net.QueryParsers.QueryParser.Clause(String field) in c:\Work\
lucene.net\src\core\QueryParser\QueryParser.cs:line 1383
at Lucene.Net.QueryParsers.QueryParser.Query(String field) in c:\Work\
lucene.net\src\core\QueryParser\QueryParser.cs:line 1331
at Lucene.Net.QueryParsers.QueryParser.Parse(String query) in c:\Work\
lucene.net\src\core\QueryParser\QueryParser.cs:line 224
--- End of inner exception stack trace ---
at Lucene.Net.QueryParsers.QueryParser.Parse(String query) in c:\Work\
lucene.net\src\core\QueryParser\QueryParser.cs:line 239
at Raven.Database.Indexing.QueryBuilder.BuildQuery(String query, IndexQuery indexQuery, RavenPerFieldAnalyzerWrapper analyzer) in c:\Builds\RavenDB-Stable\Raven.Database\Indexing\QueryBuilder.cs:line 57
--- End of inner exception stack trace ---
at Raven.Database.Indexing.QueryBuilder.BuildQuery(String query, IndexQuery indexQuery, RavenPerFieldAnalyzerWrapper analyzer) in c:\Builds\RavenDB-Stable\Raven.Database\Indexing\QueryBuilder.cs:line 64
at Raven.Database.Indexing.SimpleQueryParser.GetFieldsForDynamicQuery(IndexQuery query) in c:\Builds\RavenDB-Stable\Raven.Database\Indexing\SimpleQueryParser.cs:line 155
at Raven.Database.Queries.DynamicQueryOptimizer.SelectAppropriateIndex(String entityName, IndexQuery indexQuery, List`1 explanations) in c:\Builds\RavenDB-Stable\Raven.Database\Queries\DynamicQueryOptimizer.cs:line 50
at Raven.Database.Server.Responders.Index.GetDynamicIndexName(String index, IndexQuery indexQuery, String& entityName) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs:line 555
at Raven.Database.Server.Responders.Index.PerformQueryAgainstDynamicIndex(IHttpContext context, String index, IndexQuery indexQuery, Guid& indexEtag) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs:line 507
at Raven.Database.Server.Responders.Index.ExecuteQuery(IHttpContext context, String index, Guid& indexEtag) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs:line 440
at Raven.Database.Server.Responders.Index.GetIndexQueryResult(IHttpContext context, String index) in c:\Builds\RavenDB-Stable\Raven.Database\Server\Responders\Index.cs:line 375
at Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx) in c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 864
at Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx) in c:\Builds\RavenDB-Stable\Raven.Database\Server\HttpServer.cs:line 609
---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
at System.Net.HttpWebRequest.GetResponse()
at Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func`1 getResponse) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 340
--- End of inner exception stack trace ---
at Raven.Client.Connection.HttpJsonRequest.HandleErrors(WebException e) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 532
at Raven.Client.Connection.HttpJsonRequest.ReadJsonInternal(Func`1 getResponse) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 346
at Raven.Client.Connection.HttpJsonRequest.ReadResponseJson() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 230
at Raven.Client.Connection.ServerClient.DirectQuery(String index, IndexQuery query, String operationUrl, String[] includes, Boolean metadataOnly, Boolean includeEntries) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:line 1209
at Raven.Client.Connection.ServerClient.<>c__DisplayClass62.<Query>b__61(String u) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:line 1078
at Raven.Client.Connection.ReplicationInformer.TryOperation[T](Func`2 operation, String operationUrl, Boolean avoidThrowing, T& result, Boolean& wasTimeout) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ReplicationInformer.cs:line 494
at Raven.Client.Connection.ReplicationInformer.ExecuteWithReplication[T](String method, String primaryUrl, Int32 currentRequest, Int32 currentReadStripingBase, Func`2 operation) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ReplicationInformer.cs:line 455
at Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](String method, Func`2 operation) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:line 174
at Raven.Client.Connection.ServerClient.Query(String index, IndexQuery query, String[] includes, Boolean metadataOnly, Boolean indexEntriesOnly) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:line 1078
at Raven.Client.Document.AbstractDocumentQuery`2.ExecuteActualQuery() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 663
at Raven.Client.Document.AbstractDocumentQuery`2.InitSync() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 645
at Raven.Client.Document.AbstractDocumentQuery`2.GetEnumerator() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Document\AbstractDocumentQuery.cs:line 881
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at Raven.Client.Linq.RavenQueryProviderProcessor`1.GetQueryResult[TProjection](IDocumentQuery`1 finalQuery) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1572
at Raven.Client.Linq.RavenQueryProviderProcessor`1.ExecuteQuery[TProjection]() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1497
at Raven.Client.Linq.RavenQueryProviderProcessor`1.Execute(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1470
at Raven.Client.Linq.RavenQueryProvider`1.Execute(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:line 155
at Raven.Client.Linq.RavenQueryProvider`1.System.Linq.IQueryProvider.Execute[S](Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:line 198
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
at Avenius.ProductManagement.DataAccess.ProductDataAccess.<>c__DisplayClass8.<GetBySku>b__7(IDocumentSession session) in s:\Dev\Avenius.Products.DataAccess\DataAccess\ProductDataAccess.cs:line 51
at Avenius.RavenDataAccess.BaseRavenDataAccess`2.<>c__DisplayClass4`1.<PerformDbGetCommand>b__3(IDocumentSession session) in s:\Dev\Avenius.RavenDataAccess\BaseRavenDataAccess.cs:line 40
at Avenius.RavenDataAccess.BaseRavenDataAccess`2.PerformDbCommand(Action`1 action) in s:\Dev\Avenius.RavenDataAccess\BaseRavenDataAccess.cs:line 22
at Avenius.RavenDataAccess.BaseRavenDataAccess`2.PerformDbGetCommand[TReturnType](Func`2 action) in s:\Dev\Avenius.RavenDataAccess\BaseRavenDataAccess.cs:line 38
at Avenius.ProductManagement.DataAccess.ProductDataAccess.GetBySku(String vendorName, String sku, Boolean partialMatch) in s:\Dev\Avenius.Products.DataAccess\DataAccess\ProductDataAccess.cs:line 45
at Avenius.STC.Feed.Feeds.Incoming.DiscontinuedProductFeed.<ProcessImpl>b__0(CsvReader csv) in s:\Dev\Avenius.STC.Feed\Feeds\Incoming\DiscontinuedProductFeed.cs:line 22
at Avenius.STC.Feed.Feeds.Incoming.BaseSTCCSVFeed.HandleFile(String webPath, Boolean fileContainsHeaders, Action`1 csvHandler) in s:\Dev\Avenius.STC.Feed\Feeds\Incoming\BaseSTCCSVFeed.cs:line 24
at Avenius.STC.Feed.Feeds.Incoming.DiscontinuedProductFeed.ProcessImpl() in s:\Dev\Avenius.STC.Feed\Feeds\Incoming\DiscontinuedProductFeed.cs:line 18
at Avenius.STC.Feed.Feeds.BaseSTCDataFeed.Process() in s:\Dev\Avenius.STC.Feed\Feeds\BaseSTCDataFeed.cs:line 18
at Avenius.DataFeed.ConsoleApp.Program.DoWork(List`1 feedsToProcess) in s:\Dev\Avenius.DataFeed.ConsoleApp\Program.cs:line 163
Please let me know if I am missing something simple.