объединить атрибуты в поисковом выражении - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь построить выражение фильтра в запросе для поиска данных в DynamodB.

var params = { 
        TableName: "ContactsTable",
        ExpressionAttributeNames: {
            "#lastName": "LastName",
            "#firstName": "FirstName",
            "#contactType": "ContactType"
        },
        FilterExpression: "contains(#lastName, :searchedName) or contains(#firstName, :searchedName)",
        ExpressionAttributeValues: {
            ":companyContactType": event.query.companyContactType,
            ":searchedName": event.query.searchedValue
        },
        KeyConditionExpression: "#contactType = :companyContactType"
    };

Пользователи обычно ищут LastName, FirstName (они добавляют запятую к LastName в качестве общего шаблона поиска).Однако данные хранятся в отдельных атрибутах с именами LastName и FirstName, так что они также могут выполнять поиск по ним.

Есть ли способ, которым я могу динамически объединить эти два поля, например, contains(#lastName<append comma>#firstName, :searchedName)?

1 Ответ

0 голосов
/ 02 мая 2019

Вы должны удалить запятую из пользовательского ввода, разделить слова и, для каждого слова, проверить, содержится ли оно в обоих именах (имя и фамилия) и 'или' вместе, или даже использовать начинается_ с вместо содержимого.

Отл.Ибо "Джон Смит" приведет к

содержит (#lastName, "john") или содержит (#lastName, "smith") или содержит (#firstName, "john") или содержит (#firstName, "smith ")

Также в теге includes () учитывается регистр, исходя из того, что я знаю, поэтому вы можете указать имя и фамилию в нижнем регистре, а также в качестве поискового запроса в нижнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...