Я запрашиваю vespa, чтобы проверить, присутствует ли конкретный идентификатор пользователя в массиве идентификаторов пользователей.http://localhost:8080/search/?yql=select * from sources doc where userIds contains 'user1';
Определение поиска:
search doc {
document doc {
field userIds type array<string> {
indexing : index | summary
}
field doctype type string {
indexing : summary
}
}
Пример ответа:
{
"children": [{
"id": "id:doc:doc::0",
"fields": {
"userIds": ["user1", "user2", "user3"],
"doctype": "type1"
}
},
{
"id": "id:doc:doc::1",
"fields": {
"userIds": ["user1", "user3"],
"doctype": "type2"
}
}
]}
Когда я удаляю элемент(" user1 ") из массива, я все еще получаю хиты в ответ, даже когда он успешно удаляется из массива.
API обновления:
PUT http://localhost:8080/document/v1/doc/doc/docid/0
{
"update": "id:doc:doc::0",
"fields": {
"userIds[0]": {
"remove": 0
}
}
}
GET http://localhost:8080/document/v1/doc/doc/docid/0
{"fields": {
"userIds": ["user2", "user3"],
"doctype": "type1"
}
}
Даже после обновления вышеуказанного поля userIds тот же запрос
http://localhost:8080/search/?yql=select * from sources doc where userIds contains 'user1';
дает ответ,
{"children": [{
"id": "id:doc:doc::0",
"fields": {
"userIds": ["user2", "user3"],
"doctype": "type1"
}
},
{
"id": "id:doc:doc::1",
"fields": {
"userIds": ["user1", "user3"],
"doctype": "type2"
}
}]}
InВ приведенном выше ответе нет « user1 » в массиве userIds « id: doc: doc :: 0 ».Но, тем не менее, запрос дает это как хит.Пожалуйста, помогите.
Edit-1: обратите внимание, что, когда я назначаю новый массив с удаленным элементом, он работает правильно
PUT http://localhost:8080/document/v1/doc/doc/docid/0
{
"update": "id:doc:doc::0",
"fields": {
"userIds": {
"assign": ["user2", "user3"]
}
}
}
Приведенный выше API обновления даетожидаемые хиты в ответе, для запроса.Но, поскольку я вызываю Update API из Searcher, я получаю огромную задержку во времени ответа.(Чтобы создать новый объект Array и назначить его полю userIds, когда размер массива увеличится до 50000)
Скажите, пожалуйста, почему не работает опция remove .Мне действительно нужно улучшить производительность запроса, используя его.
Edit-2: следующий синтаксис, в котором упоминается элемент, который нужно удалить для обновления массива, работает правильно.Благодаря комментарию @ Jo.
PUT http://localhost:8080/document/v1/doc/doc/docid/0
{
"update": "id:doc:doc::0",
"fields": {
"userIds": {
"remove": ["user1"]
}
}
}
Обратите внимание, что приведенный выше синтаксис удаляет все вхождения указанного элемента.