Home > Blockchain >  Elasticsearch join-like query within same index
Elasticsearch join-like query within same index

Time:04-07

I have an index with a following structure (mapping)

{
    "properties": {
        "content": {
            "type": "text",
        },
        "prev_id": {
            "type": "text",
        },
        "next_id": {
            "type": "text",
        }
    }
}

where prev_id and next_id are IDs of documents in this index (may be null values).

I want to perform _search query and get prev.content and next.content fields.

Now I use two queries: the first for searching by content field

curl -X GET 'localhost:9200/idx/_search'  -H 'content-type: application/json' -d '{
  "query": {
    "match": {
      "content": "yellow fox"
    }
  }
}'

and the second to get next and prev records.

curl -X GET 'localhost:9200/idx/_search'  -H 'content-type: application/json' -d '{
  "query": {
    "ids": {
      "values" : ["5bb93552e42140f955501d7b77dc8a0a", "cd027a48445a0a193bc80982748bc846", "9a5b7359d3081f10d099db87c3226d82"]
    }
  }
}'

Then I join results on application-side.

Can I achieve my goal with one query only?

PS: the purpose to store next-prev as IDs is to safe disk space. I have a lot of records and content field is quite large.

CodePudding user response:

What you are doing is the way to go. But how large is the content? - Maybe you can consider not storing content ( source = false)?

  • Related