我正在开发GWT Framework(JAVA)上的Web应用程序。我正在使用CouchDB(NoSQL数据库) 用于存储用户配置文件,用户问题和答案。我是NoSQL数据库的新手,所以我需要在我的应用程序中实现全文搜索。
示例:“什么是Java?”
期望的结果:可以找到所有包含所有三个单词的问题什么,是Java 。
所以有任何想法如何在couchdb中实现这个结果。
答案 0 :(得分:2)
使用couchdb lucene与couchdb的集成非常简单,非常适合您的用例。 Couch-db lucene支持lucene的整个查询语法。对于您的问题,可以使用+。
" +"或要求的运营商要求在" +"之后的术语。符号存在于单个文档的某个字段中。
以下是示例查询
http://localhost:5984/_fti/local/database/_design/design_name/index_name?q=+"What is java"
答案 1 :(得分:0)
您可以使用CouchDB列表函数实现它。
我有一个文档,需要在名称和描述字段中搜索关键字。因此,我创建了一个视图,该视图将发出doc id作为键,并发出doc.name,doc._id,doc.description作为值。
现在,我创建了一个列表函数,该函数将使用Javascript匹配函数并为我提供文档ID的匹配列表。
样本查询: http://localhost:5984/dashboard/_design/testSearch/_list/results/ByName?searchQuery=What是Java
{
"_id": "_design/testSearch",
"lists": {
"results": "function(head, req) { var query= new RegExp(req.query.searchQuery,'i'); var arr=new Array(); var key; var row; while(row = getRow()) { if(row.value[0].match(query) || row.value[2].match(query)) { arr.push([row.value[0].toUpperCase(),row.value[1]]); key = row.key;}} arr.sort(); send('{\"'+key+'\":\"'+arr+'\"}');}"
},
"views": {
"ByName": {
"map": "function (doc) {\n if((doc.isdeleted==\"false\" || doc.isdeleted==false) && doc.userid && doc.name){\n emit(doc._id,[doc.name,doc._id,doc.description]);\n }\n}"
}
},
"language": "javascript"
}