Tuesday, 11 February 2014

TERM Facets with Term Scripts

TERM Facets with Term Scripts

Allow to define a script for terms facet to process the actual term that will be used in the term facet collection, and also optionally control its inclusion or not.
The script can either return a boolean value, with true to include it in the facet collection, and false to exclude it from the facet collection.
Another option is for the script to return a string controlling the term that will be used to count against. The script execution will include the term variable which is the current field term used.

Here is an example for script return a string:

POST Method:

http://localhost:9200/mobiles/_search?pretty=true
{
    "query": {
        "query_string": {
            "query": "*a*"
        }
    },
    "facets": {
        "type": {
            "terms": {
                "field": "_type",
                "script": "term + ' script'"
            }
        }
    }
}

Results:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 5,
    "max_score": 1,
    "hits": [
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "lumia 510"
        }
      },
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "lumia 520"
        }
      },
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "3",
        "_score": 1,
        "_source": {
          "name": "lumia 625"
        }
      },
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "4",
        "_score": 1,
        "_source": {
          "name": "lumia 720"
        }
      },
      {
        "_index": "mobiles",
        "_type": "micromax",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "canvas"
        }
      }
    ]
  },
  "facets": {
    "type": {
      "_type": "terms",
      "missing": 0,
      "total": 5,
      "other": 0,
      "terms": [
        {
          "term": "nokia script",
          "count": 4
        },
        {
          "term": "micromax script",
          "count": 1
        }
      ]
    }
  }
}

Here is an example for script return a Boolean:

POST Method:

http://localhost:9200/mobiles/_search?pretty=true
{
    "query": {
        "query_string": {
            "query": "*a*"
        }
    },
    "facets": {
        "type": {
            "terms": {
                "field": "_type",
                "script": "term == 'nokia' ? true : false"
            }
        }
    }
}

Results:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 5,
    "max_score": 1,
    "hits": [
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "lumia 510"
        }
      },
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "lumia 520"
        }
      },
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "3",
        "_score": 1,
        "_source": {
          "name": "lumia 625"
        }
      },
      {
        "_index": "mobiles",
        "_type": "nokia",
        "_id": "4",
        "_score": 1,
        "_source": {
          "name": "lumia 720"
        }
      },
      {
        "_index": "mobiles",
        "_type": "micromax",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "canvas"
        }
      }
    ]
  },
  "facets": {
    "type": {
      "_type": "terms",
      "missing": 0,
      "total": 5,
      "other": 1,
      "terms": [
        {
          "term": "nokia",
          "count": 4
        }
      ]
    }
  }
}


No comments:

Post a Comment