CouchDB中的全文搜索

时间:2014-05-02 17:52:53

标签: java gwt full-text-search couchdb nosql

我正在开发GWT Framework(JAVA)上的Web应用程序。我正在使用CouchDB(NoSQL数据库) 用于存储用户配置文件,用户问题和答案。我是NoSQL数据库的新手,所以我需要在我的应用程序中实现全文搜索。

示例:“什么是Java?”

期望的结果:可以找到所有包含所有三个单词的问题什么,是Java

所以有任何想法如何在couchdb中实现这个结果。

2 个答案:

答案 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"
}