thugsb
thugsb

Reputation: 23436

ElasticSearch filtering for a tag in array

I've got a bunch of events that are tagged for their audience:

{ id = 123, audiences = ["Public", "Lecture"], ... }

I've trying to do an ElasticSearch query with filtering, so that the search will only return events that have the an exact entry of "Public" in that audiences array (and won't return events that a "Not Public").

How do I do that?

This is what I have so far, but it's returning zero results, even though I definitely have "Public" events:

curl -XGET 'http://localhost:9200/events/event/_search' -d '
{
    "query" : {
        "filtered" : {
            "filter" : {
                "term" : {
                    "audiences": "Public"
                }
            },
            "query" : {
                "match" : {
                    "title" : "[searchterm]" 
                }
            }
        }
    }
}'

Upvotes: 1

Views: 1513

Answers (1)

pkhlop
pkhlop

Reputation: 1844

You could use this mapping for you content type

{
  "your_index": {
    "mappings": {
      "your_type": {
        "properties": {
          "audiences": {
            "type": "string",
            "index": "not_analyzed"
          },
        }
      }
    }
  }
}

not_analyzed Index this field, so it is searchable, but index the value exactly as specified. Do not analyze it.

And use lowercase term value in search query

Upvotes: 1

Related Questions