Simple Search Service — это приложение IBM Cloud, которое позволяет быстро создать многогранную поисковую систему, предоставляя API, который можно использовать для внедрения поиска в ваши собственные приложения. Служба также создает веб-сайт, который позволяет вам предварительно просмотреть API и протестировать его на собственных данных, а также управлять своими данными с помощью простой CMS.
После развертывания используйте браузер для загрузки данных CSV или TSV. Укажите поля для фасета, а сервис позаботится обо всем остальном.
Приложение использует следующие службы Bluemix:
После загрузки данных вы можете использовать пользовательский интерфейс для просмотра и управления своими данными через встроенную CMS. Кроме того, конечная точка API с поддержкой CORS доступна по адресу <your domain name>/search
. Конечная точка использует преимущества встроенной интеграции Cloudant для полнотекстового индексирования Lucene. Вот что вы получаете:
?q=colour:black+AND+brand:fender
?q=black+fender+strat
?q=black+fender+strat&bookmark=<xxx>
?sort=color
или ?sort=-color
для убыванияВы можете использовать его вместе с остальным API для интеграции службы простого поиска в ваши приложения. Для получения полной справки по API нажмите здесь.
Хотя это приложение представляет собой демонстрационную версию, демонстрирующую, как легко можно создать приложение на Bluemix с использованием Node.js и Cloudant, оно также предоставляет зрелый API поиска, который масштабируется за счет добавления нескольких узлов Simple Search Service. Фактически, аналогичная архитектура обеспечивает поиск в каталоге сервисов Bluemix.
Более подробное руководство по использованию Simple Search Service доступно здесь.
Самый быстрый способ развернуть это приложение в Bluemix — нажать кнопку « Развернуть в IBM Cloud» ниже.
У вас нет учетной записи IBM Cloud? Если вы еще этого не сделали, вам будет предложено зарегистрировать учетную запись IBM Cloud, когда вы нажмете кнопку. Зарегистрируйтесь, подтвердите свой адрес электронной почты, затем вернитесь сюда и снова нажмите кнопку « Развернуть в IBM Cloud» . Ваши новые учетные данные позволят вам выполнять развертывание на платформе, а также писать онлайн-код с помощью Bluemix и Git. Если у вас есть вопросы о работе в Bluemix, найдите ответы в документации IBM Cloud.
Для ручного развертывания в IBM Cloud требуется git
и интерфейс командной строки Cloud Foundry.
$ git clone https://github.com/ibm-watson-data-lab/simple-search-service.git
$ cf create-service cloudantNoSQLDB Lite simple-search-service-cloudant-service
$ cd simple-search-service
$ cf push
Клонируйте этот репозиторий, затем запустите npm install
, чтобы добавить библиотеки Node.js, необходимые для запуска приложения.
Затем создайте несколько переменных среды, содержащих ваш URL-адрес Cloudant.
# Cloudant URL
export SSS_CLOUDANT_URL= ' https://<USERNAME>:<PASSWORD>@<HOSTNAME> '
замена заполнителей USERNAME
, PASSWORD
и HOSTNAME
на данные вашей учетной записи Cloudant.
Затем запустите:
node app.js
Служба простого поиска использует Etcd для обнаружения и использования некоторых других наших простых служб для расширения и улучшения службы.
Другие услуги, доступные для службы простого поиска:
Для включения реестра служб необходимо установить переменную среды ETCD_URL
. Это должен быть URL-адрес вашего экземпляра Etcd, включая любую базовую информацию для аутентификации HTTP.
export ETCD_URL='http://username:[email protected]'
Если реестр служб включен, все обнаруженные службы будут отображаться на странице «Службы» с переключателем для включения или отключения этих служб.
После включения эти службы будут автоматически интегрированы в службу простого поиска.
Если вы загрузили свой контент в службу Simple Search, но теперь хотите, чтобы общедоступной была только конечная точка /search
, вы можете включить «Режим блокировки».
Просто установите для переменной среды LOCKDOWN
значение true
перед запуском службы простого поиска:
export LOCKDOWN=true
node app.js
или установите пользовательскую переменную среды в Bluemix.
При обнаружении режима блокировки все веб-запросы получат ответ 401 Unauthorised
, за исключением конечной точки /search
, которая продолжит работать. Это предотвращает изменение ваших данных до тех пор, пока режим блокировки снова не будет отключен путем удаления переменной среды.
Если вы хотите получить доступ к простой службе поиска в режиме блокировки, вы можете включить базовую аутентификацию HTTP, установив еще две переменные среды:
SSS_LOCKDOWN_USERNAME
SSS_LOCKDOWN_PASSWORD
Если они установлены, вы можете обойти режим блокировки, указав соответствующие имя пользователя и пароль. Если вы получите доступ к пользовательскому интерфейсу, ваш браузер предложит вам ввести эти данные. Если вы хотите получить доступ к API, вы можете указать имя пользователя и пароль в своем запросе:
curl -X GET ' http://<yourdomain>/row/4dac2df712704b397f1b64a1c8e25033 ' --user < username > : < password >
Служба простого поиска имеет API, который позволяет вам управлять своими данными за пределами предоставленного пользовательского интерфейса. Используйте это для интеграции службы поиска SImple с вашими приложениями.
Поиск обеспечивается конечной точкой GET /search
.
Выполните поиск по любому из индексированных полей в наборе данных, используя поиск по полям.
# Return any docs where colour=black
GET /search ? q=colour:black
Полевой поиск использует Cloudant Search.
Выполняйте поиск по всем полям вашего набора данных, используя свободный текстовый поиск.
# Return any docs 'black' is mentioned
GET /search ? q=black
Получите следующую страницу результатов, используя параметр bookmark
. Это предусмотрено во всех результатах из конечной точки /search
(см. примеры ответов ниже). Передайте это следующему поиску (с теми же параметрами запроса), чтобы вернуть следующий набор результатов.
# Return the next set of docs where 'black' is mentioned
GET /search ? q=black & bookmark= < ... >
Можно изменить количество возвращаемых результатов с помощью параметра limit
.
# Return the next set of docs where 'black' is mentioned, 10 at a time
GET /search ? q=black & bookmark= < ... >& limit=10
Все поисковые запросы будут отвечать одинаково.
{
"total_rows": 19, // The total number of rows in the dataset
"bookmark": "g1AAAA...JjFkA0kLVvg", // bookmark, for pagination
"rows": [ // the rows returned in this response
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... },
{ ... }
],
"counts": { // counts of the fields which were selected as facets during import
"type": {
"Black": 19
}
},
"_ts": 1467108849821
}
Определенную строку можно вернуть, используя ее уникальный идентификатор, который можно найти в поле _id
каждой строки. Это делается с помощью конечной точки GET /row/:id
.
GET /row/44d2a49201625252a51d252824932580
Это вернет представление JSON этой конкретной строки.
Новые данные можно добавлять построчно, используя конечную точку POST /row
.
Вызовите эту конечную точку, передав пары ключ/значение, соответствующие полям в существующих данных. НЕТ обязательных полей, и все типы полей будут обязательными. Запрос завершится неудачей, если будут переданы какие-либо поля, которых еще нет в наборе данных.
POST /row -d ' field_1=value_1&field_n=value_n '
_id
новой строки будет сгенерирован автоматически и возвращен в поле id
ответа.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 1-8a23bfa9ee2c88f2ae8dd071d2cafd56 "
}
Выходные данные можно обновить с помощью конечной точки PUT /row/:id
.
Вызовите эту конечную точку, передав пары ключ/значение, соответствующие полям в существующих данных. Вы также должны включить параметр _id
в пары ключ/значение. НЕТ обязательных полей, и все типы полей будут обязательными. Запрос завершится неудачей, если будут переданы какие-либо поля, которых еще нет в наборе данных.
Примечание. Любые поля, которые не были предоставлены на момент обновления, будут удалены. Даже если поле не изменяется, его всегда необходимо предоставлять, чтобы сохранить его значение.
Ответ аналогичен добавлению строки, однако обратите внимание, что номер версии документа увеличился.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 2-6281e0a21ed461659dba6a96d3931ccf "
}
Определенную строку можно удалить, используя ее уникальный идентификатор, который можно найти в поле _id
каждой строки. Это делается с помощью конечной точки DELETE /row/:id
.
DELETE /row/44d2a49201625252a51d252824932580
Ответ аналогичен ответу на редактирование строки, но еще раз обратите внимание, что номер версии документа снова увеличился.
{
"ok" : true ,
"id" : " 22a747412adab2882be7e38a1393f4f2 " ,
"rev" : " 3-37b4f5c715916bf8f90ed997d57dc437 "
}
Чтобы программно удалить все данные и инициализировать индекс
POST /initialize
включение свойства schema
в полезные данные, определяющие следующую структуру
{ "fields": [
{
"name": "id",
"type": "string",
"example": "example_id",
"facet": true
},
{
"name": "score",
"type": "number",
"example": 8,
"facet": false
},
{
"name": "tags",
"type": "arrayofstrings",
"example": "example_tag_1,example_tag_2",
"facet": true
}
]
}
> This example defines a schema containing three fields of which two will be enabled for faceted search.
Допустимые значения:
name
свойства: любая строкаtype
свойства: number
, boolean
, string
, arrayofstrings
(например, val1,val2,val3
).example
свойства: любое допустимое значение для этого type
facet
свойства: true
или false
См. https://github.com/IBM/metrics-collector-client-node#privacy-notice.
При развертывании вручную отслеживание развертывания можно отключить, удалив require("metrics-tracker-client").track();
с конца главного файла сервера app.js
Авторские права IBM Cloud Data Services, 2018 г.
Лицензируется по лицензии Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.