在进行聚合时,有没有办法超越nGram过滤器?
我有一个定义的ngram过滤器:
"ngram_filter": {
"type": "ngram",
"min_gram": "1",
"max_gram": "100"
}
我希望在字段上定义一个聚合,并在其上定义此过滤器:
我得到了桶过滤结果:
"buckets": [
{
"key": "_",
"doc_count": 394
},
{
"key": "a",
"doc_count": 365
},
{
"key": "m",
"doc_count": 357
},
{
"key": "i",
"doc_count": 344
},
{
"key": "_d",
"doc_count": 341
},
{
"key": "d",
"doc_count": 341
},
{
"key": "e",
"doc_count": 319
},
{
"key": "r",
"doc_count": 289
},
{
"key": "l",
"doc_count": 260
},
{
"key": "l_",
"doc_count": 221
}
]
我也不想改变ngram分析器...
答案 0 :(得分:1)
对于该字段,您需要设置自定义nGram分析器,您需要添加一个应保留“原始”术语的子字段(使用standard
分析器或字段应为not_analyzed
)或您在汇总中所需的条款。然后,您的汇总应指向您的field.sub_field
字段。
好的,尝试这个次优解决方案(由于这与子场方法相比有多快),而不改变映射:
{
"aggs": {
"whatever": {
"terms": {
"script": "_source['yourFieldName']"
}
}
}
}