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

时间:2016-08-04 13:34:04

标签: cloudant

我希望能够使用全文索引匹配整个短语,但我似乎无法弄清楚如何做到这一点。 Lucene Query Parser语法指出:

  

短语是由双引号括起来的一组单词,例如" hello dolly"。

但是当我指定以下选择器时,它会返回带有" sign"的所有记录。或"设计"在名称中但我希望它只返回带有" sign design"。

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

我的索引定义如下:

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

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

3 个答案:

答案 0 :(得分:1)

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

请您尝试创建此设计文档吗?

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

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

答案 1 :(得分:0)

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

您可以emit()看到您连续的每一对单词。因此,例如,根据短语“快速棕色狐狸”,您可以发出["the","quick"]["quick","brown"]["brown", "fox"]。我认为这可能很简单,但它实际上只适用于少量数据。该指数可能会增长得太大。

答案 2 :(得分:0)

如果你想使用cloudant搜索,你应该首先创建一个搜索索引,就像JasonSmith所说的那样。然后,您可以使用此搜索索引来执行特定查询。 假设您有一个具有"名称的文档:SIGNDESIN"字段。

1.如果您想查询整个短语,可以这样查询:

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

2.如果要查询子字符串短语,可以这样查询:

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