Si intenta pensar demasiado en cómo estructurar sus datos para la búsqueda, es muy probable que se pierda una búsqueda importante que realmente podría haber utilizado en su aplicación.
Alternativamente (y esto es por experiencia) terminas reinventando todo tipo de técnicas de indexación.
Tengo algo de experiencia con lucene (hay una versión java y .net, había un puerto C, pero no estoy seguro de cuán activo está en estos días), y puede hacer cosas asombrosas con datos almacenados en cualquier estructura.
Me gusta el aspecto de couch db, solo depende de cuánto quieras experimentar con algo nuevo y poderoso, o de optar por algo que (actualmente) está bastante endurecido en la batalla:lucene.