Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save cheesuslovesme/d2b7da6aed1de1dcd899b30c0c303e9c to your computer and use it in GitHub Desktop.
Save cheesuslovesme/d2b7da6aed1de1dcd899b30c0c303e9c to your computer and use it in GitHub Desktop.
Yassmommy
Got it, you want to limit the fields returned in each document based on the length of their values. In Elasticsearch, you can achieve this using the `source` parameter to specify which fields to include in the search response, along with scripting to filter the fields based on their length. Here's an example:
```json
{
"_source": {
"includes": [
"*",
"field1",
"field2"
],
"script_fields": {
"short_fields": {
"script": {
"source": """
def result = [:];
for (entry in params['_source'].entrySet()) {
if (entry.getValue() instanceof String && entry.getValue().length() < params.limit) {
result[entry.getKey()] = entry.getValue();
}
}
return result;
""",
"lang": "painless",
"params": {
"limit": 50
}
}
}
}
}
}
```
In this example:
- `"_source"` includes all fields by default (`"*"`) and then explicitly specifies `field1` and `field2` to be included in the response.
- `script_fields` defines a custom field (`short_fields`) generated by a script.
- The script iterates over each field in the document (`params['_source'].entrySet()`) and checks if it's a string and if its length is less than the specified limit (`params.limit`).
- If a field meets the criteria, it's added to the `short_fields` result.
Adjust the field names, character limit, and any other parameters according to your specific use case.
@cheesuslovesme
Copy link
Author

`

{
"_source": false,
"script_fields": {
"short_fields": {
"script": {
"source": """
def result = [:];
for (field in params['_source'].keySet()) {
if (doc.containsKey(field) && doc[field].size() < params.limit) {
result[field] = doc[field].value;
}
}
return result;
""",
"lang": "painless",
"params": {
"limit": 50
}
}
}
}
}
`

@cheesuslovesme
Copy link
Author

{
  "_source": false,
  "script_fields": {
    "short_fields": {
      "script": {
        "source": """
          def result = [:];
          for (field in params['_source'].keySet()) {
            if (doc.containsKey(field) && doc[field].size() < params.limit) {
              result[field] = doc[field].value;
            }
          }
          return result;
        """,
        "lang": "painless",
        "params": {
          "limit": 50
        }
      }
    }
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment