Поиск поля в AWS ElasticSearch - PullRequest
0 голосов
/ 25 мая 2020

После индексирования записей ddb в ElasticSearch при выполнении простого поиска /_search?q=test я вижу совпадения, показанные следующим образом

"hits": [
            {
                // ignore other fields ...
                "_id": "z0YdS3I",
                "_source": {
                    "M": {
                        "name": {
                            "S": "test name"
                        },
                        "age": {
                            "N": "18"
                        },
                        // ignore other fields ...
                    }
                }
            },
            ....
        ]    

Однако, когда я ищу определенное поле c, например /_search?q=name:test, у меня ноль попаданий. Это происходит с каждым полем.

"hits": {
        "total": {
            "value": 0,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    }

Поэтому вместо этого я должен искать вот так _search?q=M.name.S=test, что немного громоздко. Просто интересно, есть ли более чистый способ поиска поля? Может быть, мне не хватает какой-то конфигурации на этапе индексации?

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Я обнаружил, что могу использовать DynamoDB Converter , предоставляемый AWS SDK, для преобразования туда и обратно между объектом Javascript и его эквивалентным типом DDB AttributeValue. Таким образом, я могу проиндексировать документ в сопоставлении записи и получить к нему доступ с помощью обычных полей.

1 голос
/ 26 мая 2020

Вы можете попробовать следующее:

Сначала определите сопоставления для вашего индекса в соответствии с вашими требованиями. например -

"name":"text", 
"age":"integer"
.
.
etc

Затем проверьте, правильно ли это применено, используя /_mapping API - как только вы увидите, что типы данных применяются по вашему желанию, начинайте индексирование данных.

Подробности сопоставлений => https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

...