Cloudant: как выполнять поиск по шаблону в текстовых полях
У меня есть db в cloudant, который выглядит так
count word
4 a
1 a boy
1 a boy goes
я хочу выполнить такой запрос
word: *boy*
как мне сделать это в cloudant? я попробовал следующее, но это не сработало
{
"selector": {
"word": "*boy*"
},
"fields": [
],
"sort": [
{
"_id": "asc"
}
]
}
1 ответ
Вы могли бы использовать $regex
оператор условия.
{
"selector": {
"word": {
"$regex": "boy"
}
},
"fields": [
],
"sort": [
{
"_id": "asc"
}
]
}
Из документа:
Шаблон регулярного выражения для сопоставления с полем документа. Соответствует только тогда, когда поле является строковым значением и соответствует предоставленному регулярному выражению.
Поскольку регулярные выражения не работают с индексами, вам следует рассмотреть возможность использования 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
Надеюсь это поможет!