(Cloudant DB Java API) 执行类似的操作 Select Distinct with WHERE 子句
(Cloudant DB Java API) Perform similar operation Select Distinct with WHERE clause
我有一个与此类似的数据集。基本上它由不同页面的word文档组成,指示页码以及页面的全文。
{
"_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",
}
到目前为止,我可以通过检查其中一篇文章 How do I do the SQL equivalent of "DISTINCT" in CouchDB?
来使用 Select Distinct Count 进行类似的查询
现在的问题是我如何能够搜索数据集,然后按 FILE_NAME 对它们进行分组(当 SQL 使用的代码是 SELECT DISTINCT FILE_NAME WHERE PAGE_FULLTEXT 像 "%hello%")
CouchDB 中 Distinct 的通常等价物是在查询时使用 MapReduce 视图和 group_level=1
或 group=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
查询视图以生成与字符串 "hello world".
最匹配的文档
我有一个与此类似的数据集。基本上它由不同页面的word文档组成,指示页码以及页面的全文。
{
"_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",
}
到目前为止,我可以通过检查其中一篇文章 How do I do the SQL equivalent of "DISTINCT" in CouchDB?
来使用 Select Distinct Count 进行类似的查询现在的问题是我如何能够搜索数据集,然后按 FILE_NAME 对它们进行分组(当 SQL 使用的代码是 SELECT DISTINCT FILE_NAME WHERE PAGE_FULLTEXT 像 "%hello%")
CouchDB 中 Distinct 的通常等价物是在查询时使用 MapReduce 视图和 group_level=1
或 group=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
查询视图以生成与字符串 "hello world".