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

Надеюсь это поможет!

Другие вопросы по тегам