Cloudant 搜索:使用全文索引匹配整个短语

Cloudant Search: match a whole phrase using a full text index

我希望能够使用全文索引来匹配整个短语,但我似乎不知道该怎么做。 Lucene 查询解析器语法指出:

A Phrase is a group of words surrounded by double quotes such as "hello dolly".

但是当我指定以下选择器时,它 return 包含名称中带有 "sign" 或 "design" 的所有记录,但我希望它仅 return那些 "sign design".

POST https://foo.cloudant.com/remote/_find
{"selector":{"$text":"\"SIGN DESIGN\""}}

我的索引定义如下:

db.index({
  name: 'subbies_text',
  type: 'text',
  index: {},
})

或者,是否可以对 json 索引中的字段进行子字符串匹配?

如果您知道允许的最大字数,您可以使用 map-reduce 视图创建可搜索索引。我认为这并不理想,但只是为了后代:

您可以 emit() 您看到的每一对连续的单词。因此,例如,给定短语 "The quick brown fox" 那么您可以发出 ["the","quick"]["quick","brown"]["brown", "fox"]。我认为这可能很好也很简单,但它实际上只适用于少量数据。该索引可能会变得太大。

您正在使用索引 API 创建索引,对吗?

你能尝试创建这个设计文档吗?

{ "_id": '_design/library',
  "indexes": {
    "subbies_text": {
      "analyzer": {
        "name":'standard'
      },
      "index": "function(doc) { index('XXX', doc.YYY); }"
    }
  }
}

(但是,将 "XXX" 和 "YYY" 更改为您的字段名称。

如果你想使用 Cloudant 搜索,你应该像 JasonSmith 所说的那样首先创建一个搜索索引。然后你可以使用这个搜索索引来做特定的查询。 假设您有一个包含 "name:SIGNDESIN" 字段的文档。

1.If你想查询整个词组,可以这样查询:

curl https://<username:password>@<username>.cloudant.com/db/_design/<design_doc>/_search/<searchname>?q=name:SIGNDESIN | jq .

2.If你想查询子串词组,可以这样查询:

curl https://<username:password>@<username>.cloudant.com/db/_design/<design_doc>/_search/<searchname>?q=name:SI* | jq .