我有一个非常直接的问题。
我正在使用couchdb-lucene搜索我的文档的全文。
我的文档每个都有以下字段:
_id
_rev
docID (我们系统中文档的唯一ID )
标题(文档的标题)
内容(文档正文)
userID (拥有文档的用户)
我的设计文档看起来像这样:
{
"_id": "_design/lucene",
"_rev": "10-770b7044393e067b7024a896ccf3c502",
"fulltext": {
"by_all": {
"index": "function(doc) { var ret=new Document(); ret.add(doc.title); ret.add(doc.content); return ret }"
},
"by_title": {
"index": "function(doc) { var ret=new Document(); ret.add(doc.title); return ret }"
}
}
}我不知道如何将docID作为结果的一部分返回,所以现在我只是将ID设为等于docID,但我想了解如何返回docID,因为上面的设计文档只返回文档的分数和ID。为了访问它,我宁愿不必将ID设置为与docID相同的值。
当我运行一个请求时,比如:
localhost:5984/foo/_fti/_design/lucene/by_all?q=example~0.5f
我得到了标题或内容字段中包含"example“的所有文档的集合,这很好,但是如何才能只在具有特定userID的文档的标题和内容字段中搜索"example”呢?如何传入并使用该值?
我想做这样的事情:
localhost:5984/foo/_fti/_design/lucene/by_all?q=example~0.5f&userId=123
当我这样做时: localhost:5984/foo/_fti/_design/lucene/by_all?q=example~0.5f它返回所有用户的文档,我需要做什么才能将文档限制为属于特定用户的文档?当只有几千个文档与特定用户相关时,我不想搜索数百万个文档中的每一个。
谢谢!
附注:我知道我可以在视图中使用映射:" map ":"function(doc){ emit(doc._id,doc._rev)}“
这是相关的吗?有什么方法可以在couchdb-lucene结果中使用映射吗?我不知道如何指定在map的键上使用哪个值,所以它默认返回ID,如何将键设置为使用特定字段?也许map甚至不是正确的轨道。我不知道在这里做什么,我对CouchDB和Lucene都是新手,还不是很了解它们。
再次感谢!
发布于 2011-08-22 01:37:33
这看起来很简单,但您需要更改索引函数。
function(doc) {
var ret=new Document();
ret.add(doc.title);
ret.add(doc.content});
ret.add(doc.userID, {"field":"userID"});
ret.add(doc.docID, {"field":"docID","store":"yes"});
return ret;
}使用查询;
localhost:5984/foo/_fti/_design/lucene/by_all?q=example%20AND%20userID:123这将查找标题或内容中包含“example”的所有文档,只要userID等于123。此外,docID值将在结果中返回。
HTH、B.
https://stackoverflow.com/questions/5112341
复制相似问题