Cloudant:如何在文本字段上执行通配符搜索

时间:2017-03-27 19:57:08

标签: lucene wildcard cloudant python-cloudant

我在cloudant中有一个看起来像这样的数据库

count word

4     a         
1     a boy
1     a boy goes

我想运行像这样的查询

word: *boy*

我如何在cloudant中执行此操作?我试过以下但是没有用

{
  "selector": {
    "word": "*boy*"
  },
  "fields": [

  ],
  "sort": [
    {
      "_id": "asc"
    }
  ]
}

1 个答案:

答案 0 :(得分:2)

您可以使用$regex condition operator

{
 "selector": {
   "word": {
    "$regex": "boy"
   }
 },
 "fields": [
 ],
 "sort": [
  {
   "_id": "asc"
  }
 ]
}

来自doc:

  

与文档字段匹配的正则表达式模式。仅当字段为字符串值并与提供的正则表达式匹配时才匹配。

因为正则表达式不适用于索引,所以如果您的数据集相当大,则应考虑使用Cloudant Search而不是Cloudant Query。

创建一个设计文档,用于定义word文档属性的索引:

{
 "_id": "_design/search_example",
 "indexes": {
   "word": {
    "index": "function(doc){if (doc.word) {index('word', doc.word, {'store': true});}}"
  }
 }
}

运行搜索:

GET https://$HOST/$DATABASE/_design/search_example/_search/word?q=word:boy HTTP/1.1

结果将包含word文档属性中包含指定字符串的所有文档。要返回文档,请使用?q=word:boy&include_docs=true

希望这有帮助!