dro*_*ode 8 filter elasticsearch elasticsearch-aggregation
我在ES数据库中有一堆公司数据.我想要计算每个文件中出现的文件的数量,但是我在聚合查询时遇到了一些问题.我希望排除诸如"公司"或"公司"之类的术语 到目前为止,我已经能够按照以下代码一次成功完成一个任期.
{
"aggs" : {
"companies" : {
"terms" : {
"field" : "Companies.name",
"exclude" : "corporation"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个回报
"aggregations": {
"assignee": {
"buckets": [
{
"key": "inc",
"doc_count": 375
},
{
"key": "company",
"doc_count": 252
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够做类似的事情
{
"aggs" : {
"companies" : {
"terms" : {
"field" : "Companies.name",
"exclude" : ["corporation", "inc.", "inc", "co", "company", "the", "industries", "incorporated", "international"],
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我找不到一种不会引发错误的方法
我查看了ES文档中聚合的"术语"部分,并且只能找到单个排除的示例.我想知道是否可以排除多个术语,如果是,那么这样做的正确语法是什么.
注意:我知道我可以将字段设置为"not_analyzed"并获取完整公司名称的分组,而不是拆分名称.但是,由于分析允许存储桶更容忍名称变化(即微软公司和微软公司),我对此犹豫不决.
pic*_*ypg 11
该exclude
参数是一个正则表达式,因此您可以使用一个穷举列出所有选项的正则表达式:
"exclude" :
"corporation|inc\\.|inc|co|company|the|industries|incorporated|international"
Run Code Online (Sandbox Code Playgroud)
通常这样做,逃避价值是很重要的(例如.
).如果它不是通常生成的,那么您可以通过对它们进行分组来简化其中的一些(例如,inc\\.?
封面inc\\.|inc
或更复杂的:) co(mpany|rporation)?
.如果这将运行很多,那么可能值得测试增加的复杂性如何影响性能.
还flags
可以应用可选项,这些是Java中存在的选项Pattern
.可能派上用场的是CASE_INSENSITIVE
.
"exclude" : {
"pattern" : "...expression as before...",
"flags" : "CASE_INSENSITIVE"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4898 次 |
最近记录: |