我想用CouchDB储存的一些数据对于我,然后使用的宁静api呼吁获得的数据,我需要。我的数据库是称为"测试"与我的文档都有一个相似的结构和看起来像这样的东西(在hello-world文件是文件ID):

"hello_world" : {"id":123, "tags":["hello", "world"], "text":"Hello World"}
"foo_bar" :{"id":124, "tags":["foo", "bar"], "text":"Foo Bar"} 

我想要能够做的就是有我的用户发送一个查询的,例如:"给我的所有文件,包含单词'hello world',例如。我已经玩意见,但它看起来像他们只会允许我移动一个或更多的那些价值观纳入"关键"部分的地图的功能。这使我能够做的事情是这样的:

http://localhost:5984/test/_design/search/_view/search_view?key="你好"

但是,这并不能让我让我的用户指定它们的查询串。例如,如果他们搜索了"hello world"。我必须做的两个查询:一个"你好"和一个"世界"然后我必须要写一堆javascript结合的结果,删除重复等(呸!).我真正想要的是能够做到的事情是这样的:

http://localhost:5984/test/_design/search/_view/search_view?term="hello world"

然后使用的参数"你好世界"的视线图/降低职能找到的所有文件,包含这两个"你好"和"世界"的标签阵列。是这类的事情甚至可能CouchDB?是否有另一种方式来完成这一内部一个看法,即我不在想什么?

有帮助吗?

解决方案

CouchDB意见不支持面的搜索或全文搜索的或结果的交叉点。Couchdb-分类:设插件可以让你做所有这些事情。

http://github.com/rnewson/couchdb-lucene/tree/master

其他提示

从技术上讲,这是可能的,如果你发出的每个文件每组又收购了powerset的标签的文件,作为关键。关键设置元件,必须有序和您的查询怎样必须查询的标签订的,也是。

function map(doc) {
  function powerset(array) { ... }

  powerset_of_tags = powerset(doc.tags)
  for(i in powerset_of_tags) {
    emit(powerset_of_tags[i], doc);
  }
}

对于医生 {"hello_world" : {"id":123, "tags":["hello", "world"], "text":"Hello World"} 这将发出:

{ key: [], doc: ... }
{ key: ['hello'], doc: ... }
{ key: ['world'], doc: ... }
{ key: ['hello', 'world'], doc: ... }

虽然这是可能的,我会考虑这一个相当arkward的解决方案。我不想想象一下磁盘的使用视为一个较大数量的标签。我期望数量的发射钥匙增长2^正。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top