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 .
我希望能够使用全文索引来匹配整个短语,但我似乎不知道该怎么做。 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 .