chepukha
chepukha

Reputation: 2489

Searching for a field in AWS ElasticSearch

After indexing ddb records into ElasticSearch, when doing a simple search /_search?q=test, I see the hits shown like this

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

However, when I search for a specific field, e.g. /_search?q=name:test, I get zero hits. This happens with every field.

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

So instead I have to search like this _search?q=M.name.S=test, which is a bit cumbersome. Just wonder if there's a cleaner way to search for a field? Maybe I'm missing some configuration during indexing step?

Upvotes: 0

Views: 281

Answers (2)

chepukha
chepukha

Reputation: 2489

I found out I could use DynamoDB Converter provided by AWS SDK to convert back and forth between Javascript object and its equivalent DDB AttributeValue type. That way I can index a document in the write mapping and access it with the normal fields.

Upvotes: 1

Sowjanya R Bhat
Sowjanya R Bhat

Reputation: 1168

You could try this :

First define mappings for your index as per your requirement . like -

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

Then check if that got applied properly using /_mapping API - once you see the datatypes are applied as you desire then start indexing data.

Details of mappings => https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

Upvotes: 1

Related Questions