(Cloudant DB Java API)使用WHERE子句执行类似的操作Select Distinct



我有一个类似的数据集。基本上,它由不同页面的单词文档组成,指示页码以及页面的全文。

{
  "_id": "4b36u6vwkZH16H5vmc24sBfuZk0CRqfP",
  "_rev": "1-r5WQDAJPPuUP0oLapZrMiMRd6rOaTIz9",
  "FILE_NAME": "sample.doc",
  "PAGE_NUM": 1,
  "PAGE_FULLTEXT": "hello world",
},
{
  "_id": "nDIKw5JUWFWVD8m7HEODMa1vNI5gFEXS",
  "_rev": "1-nEp7zsuaneJj2AInyPpeBWDNP90ZGpWQ",
  "FILE_NAME": "sample.doc",
  "PAGE_NUM": 2,
  "PAGE_FULLTEXT": "this is john doe",
},
{
  "_id": "vCTlNbNk3X893FkWSYnn87L9j371taYZ",
  "_rev": "1-oJPspiBHRPeT99m8VPV9qoDTTBoJ9tVK",
  "FILE_NAME": "sample-2.doc",
  "PAGE_NUM": 1,
  "PAGE_FULLTEXT": "this is another document",
},
{
  "_id": "2FSDuaEa5bYtP2l7lEgMnqMnqsZpMJUs",
  "_rev": "1-ZQRkvfMluu0NQWYH2FUATuXy9uNtOGyk",
  "FILE_NAME": "sample-2.doc",
  "PAGE_NUM": 2,
  "PAGE_FULLTEXT": "page 2 of sample-2.doc",
},
{
  "_id": "RET7G6hUU9zSplgW7FIXWKwIVex2NEmI",
  "_rev": "1-mlryGv830RNllPwFT7JDDvJoKXuvxAXD",
  "FILE_NAME": "sample-3.doc",
  "PAGE_NUM": 1,
  "PAGE_FULLTEXT": "hello lionel",
},
{
  "_id": "VBL6BJBevcvUc6EsJ68bAjHuGRJ6zvMt",
  "_rev": "1-fPIJQHKCB2WitR74l1X8I6TOBMhMeCWF",
  "FILE_NAME": "sample-3.doc",
  "PAGE_NUM": 2,
  "PAGE_FULLTEXT": "page hello 2 of sample-3.doc",
}

到目前为止,我能够通过查看其中一篇帖子来对SelectDistinctCount进行类似的查询;DISTINCT";在CouchDB中?

现在的问题是,我如何能够搜索数据集,然后按FILE_NAME对它们进行分组(当使用SQL代码时,输出类似于SELECT DISTINCT FILE_NAME WHERE PAGE_FULLTEXT like"%hello%")

CouchDB中的Distinct通常等效于在查询时使用MapReduce视图和group_level=1group=true

但你的问题更大的部分是WHERE PAGE_FULLTEXT like "%hello%"位。正如您所指出的,MapReduce视图不适合模糊匹配。

幸运的是,Cloudant拥有Cloudant Search,它允许创建全文索引。Cloudant Search索引是在一个函数(如MapReduce)中定义的,使用index函数来定义要索引的字段。最简单的是,使用您的样本数据,索引函数是:

function(doc) {
  index("default", doc.PAGE_FULLTEXT);
}

它将您的文档摘要索引到默认字段中。

索引后,可以使用/_design/yourdesigndoc/_search/yourindexname?q=hello+world查询视图,以生成与字符串"helloworld"最匹配的文档。

最新更新