cannot query on fields that are not indexed

739 views
Skip to first unread message

kshitij

unread,
Apr 12, 2011, 5:58:15 PM4/12/11
to ravendb
Hello,

I have created a simple index called "OrderStatus/OrderStatusesByName"
which looks like

map :
from doc in docs.OrderStatuses
select new { StatusName = doc.Name }

where orderstatus is really simple. e.g.
orderstatuses/1
{
"Name": "Quote"
}

When I do
var readyStatus = session.Query<OrderStatus>()
.Where(x => x.Name == "Ready")
.FirstOrDefault();

I get the below log. Not sure what I am doing wrong here.

thanks for the help.

{
"Url": "/indexes/dynamic/OrderStatuses?query=Name
%253AReady&start=0&pageSize=1&aggregation=None",
"Error": "System.ArgumentException: The field 'Name' is not indexed,
cannot query on fields that are not indexed\r\n at
Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes()
in C:\\Users\\klimaye\\ravendb\\Raven.Database\\Indexing\
\Index.cs:line 558\r\n at
Raven.Database.Indexing.Index.IndexQueryOperation.<Query>d__1c.MoveNext()
in C:\\Users\\klimaye\\ravendb\\Raven.Database\\Indexing\
\Index.cs:line 478\r\n at
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()\r
\n at
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()\r
\n at System.Collections.Generic.List`1.InsertRange(Int32 index,
IEnumerable`1 collection)\r\n at
Raven.Database.DocumentDatabase.<>c__DisplayClass65.<Query>b__5d(IStorageActionsAccessor
actions) in C:\\Users\\klimaye\\ravendb\\Raven.Database\
\DocumentDatabase.cs:line 600\r\n at
Raven.Storage.Esent.TransactionalStorage.ExecuteBatch(Action`1 action)
in C:\\Users\\klimaye\\ravendb\\Raven.Storage.Esent\
\TransactionalStorage.cs:line 356\r\n at
Raven.Storage.Esent.TransactionalStorage.Batch(Action`1 action) in C:\
\Users\\klimaye\\ravendb\\Raven.Storage.Esent\
\TransactionalStorage.cs:line 326\r\n at
Raven.Database.DocumentDatabase.Query(String index, IndexQuery query)
in C:\\Users\\klimaye\\ravendb\\Raven.Database\
\DocumentDatabase.cs:line 544\r\n at
Raven.Database.Queries.DynamicQueryRunner.ExecuteActualQuery(IndexQuery
query, DynamicQueryMapping map, Tuple`2 touchTemporaryIndexResult,
String realQuery) in C:\\Users\\klimaye\\ravendb\\Raven.Database\
\Queries\\DynamicQueryRunner.cs:line 50\r\n at
Raven.Database.Queries.DynamicQueryRunner.ExecuteDynamicQuery(String
entityName, IndexQuery query) in C:\\Users\\klimaye\\ravendb\
\Raven.Database\\Queries\\DynamicQueryRunner.cs:line 40\r\n at
Raven.Database.Queries.DynamicQueryExtensions.ExecuteDynamicQuery(DocumentDatabase
self, String entityName, IndexQuery indexQuery) in C:\\Users\\klimaye\
\ravendb\\Raven.Database\\Queries\\DynamicQueryExtensions.cs:line 15\r
\n at
Raven.Database.Server.Responders.Index.PerformQueryAgainstDynamicIndex(IHttpContext
context, String index, IndexQuery indexQuery, Guid& indexEtag) in C:\
\Users\\klimaye\\ravendb\\Raven.Database\\Server\\Responders\
\Index.cs:line 184\r\n at
Raven.Database.Server.Responders.Index.ExecuteQuery(IHttpContext
context, String index, Guid& indexEtag) in C:\\Users\\klimaye\\ravendb\
\Raven.Database\\Server\\Responders\\Index.cs:line 144\r\n at
Raven.Database.Server.Responders.Index.GetIndexQueryRessult(IHttpContext
context, String index) in C:\\Users\\klimaye\\ravendb\\Raven.Database\
\Server\\Responders\\Index.cs:line 100\r\n at
Raven.Database.Server.Responders.Index.OnGet(IHttpContext context,
String index) in C:\\Users\\klimaye\\ravendb\\Raven.Database\\Server\
\Responders\\Index.cs:line 92\r\n at
Raven.Database.Server.Responders.Index.Respond(IHttpContext context)
in C:\\Users\\klimaye\\ravendb\\Raven.Database\\Server\\Responders\
\Index.cs:line 44\r\n at
Raven.Http.HttpServer.DispatchRequest(IHttpContext ctx) in C:\\Users\
\klimaye\\ravendb\\Raven.Http\\HttpServer.cs:line 322\r\n at
Raven.Http.HttpServer.HandleActualRequest(IHttpContext ctx) in C:\
\Users\\klimaye\\ravendb\\Raven.Http\\HttpServer.cs:line 188"
}

Ayende Rahien

unread,
Apr 12, 2011, 7:58:24 PM4/12/11
to rav...@googlegroups.com
Quick fix:
from doc in docs.OrderStatuses
select new { Name = doc.Name }


The actual bug seems that we aren't taking into account renames in the indexes.

Ayende Rahien

unread,
Apr 13, 2011, 3:44:23 AM4/13/11
to rav...@googlegroups.com

kshitij

unread,
Apr 13, 2011, 12:28:30 PM4/13/11
to ravendb
Ayende,

That quick fix worked. A related question

This code does not work

orders = from order in session.Query<Order>("Orders/OrdersByStatus")
where order.Status.Name == "Ready"
select order;

while the one below works.

orders = from order in session.Query<Order>()
where order.Status.Name == "Ready"
select order;

The index is now defined as
//Orders/OrdersByStatus
from order in docs.orders
select new { Name = order.Status.Name }

transform results
field : Name
Sort : string
storage : yes
Indexing : No/analyzed (no effect)

What am I doing wrong?

Is there something about indexing in general that I am missing?

Thanks

On Apr 13, 2:44 am, Ayende Rahien <aye...@ayende.com> wrote:
> https://github.com/ravendb/ravendb/issues/272
>
>
>
>
>
>
>
> On Wed, Apr 13, 2011 at 2:58 AM, Ayende Rahien <aye...@ayende.com> wrote:
> > Quick fix:
> > from doc in docs.OrderStatuses
> > select new { Name = doc.Name }
>
> > The actual bug seems that we aren't taking into account renames in the
> > indexes.
>

Ayende Rahien

unread,
Apr 13, 2011, 1:40:46 PM4/13/11
to rav...@googlegroups.com
Yes, 
The main issue is that you are trying to treat dynamic indexes & static indexes in the same fashion.
In Dynamic Indexes, we are doing all of the work, both on the server & the client, to match things up.
In Static Indexes, it is your responsibility to match things up properly
Reply all
Reply to author
Forward
0 new messages