我希望能够使用全文索引匹配整个短语,但我似乎无法弄清楚如何做到这一点。 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索引中的字段上进行子字符串匹配?
答案 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 .