2017-10-10 121 views
0

我有一堆包含招聘广告信息的弹性搜索文档。我试图汇总attributes.Title字段以从作业发布中提取“体验”实例的数量。例如初级,高级,领导等。相反,我得到的是与整个标题相匹配的桶,而不是每个单词都是标题栏。例如“初级Java开发人员”,“高级.NET分析师”等。ElasticSearch - 术语聚合按空白分割

如何判断弹性搜索是否根据标题中的每个单词分割聚合,而不是匹配整个字段的值。

我稍后想要扩展查询以提取“技能级别”和“角色”,但如果桶中包含字段中的所有单词,只要它们被拆分为单独的桶即可。

目前查询:

GET /jobs/_search 
{ 
    "query": { 
    "simple_query_string" : { 
     "query": "Java", 
     "fields": ["attributes.Title"] 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "group_by_state": { 
     "terms": { 
     "field": "attributes.Title.keyword" 
     } 
    } 
    } 
} 

无用输出:

{ 
    ... 
    "hits": { 
    "total": 63, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "group_by_state": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 14, 
     "buckets": [{ 
      "key": "Junior Java Tester", 
      "doc_count": 6 
     },{ 
      "key": "Senior Java Lead", 
      "doc_count": 6 
     },{ 
      "key": "Intern Java Tester", 
      "doc_count": 5 
     }, 
     ... 
     ] 
    } 
    } 
} 

所需的输出:

{ 
    ... 
    "hits": { 
    "total": 63, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "group_by_state": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 14, 
     "buckets": [{ 
      "key": "Junior", 
      "doc_count": 12 
     },{ 
      "key": "Senior", 
      "doc_count": 8 
     },{ 
      "key": "Tester", 
      "doc_count": 5 
     },{ 
      "key": "Intern", 
      "doc_count": 5 
     },{ 
      "key": "Analyst", 
      "doc_count": 5 
     }, 
     ... 
     ] 
    } 
    } 
} 

回答

1

我推断您的地图类型为keyword,因为您在名为"attributes.Title.keyword"的字段上进行了汇总。 keyword映射不会标记您的字符串,因此在汇总期间,它会将整个字符串视为唯一键。

您想要将标题字段的映射更新为type: "text"。我不会把它叫做title.keyword,但是像title.analyzed - 如果你没有指定分析器,Elasticsearch将会应用standard analyzer这应该足以让你开始。如果您只希望将标题按空白分隔(而不是词干和其他内容),则还可以使用whitespace analyzer。你在你的聚合中得到很多其他的话,但我假设你正在寻找这些共享体验修饰符标记,并根据频率,他们将上升到顶部。

如果您使用5.x,请务必设置'fielddata:true',因为textfields aren't available for aggregation by default

映射:

"properties" : { 
    "attributes" : { 
     "properties" : { 
      "title" : { 
       "properties" : { 
        "keyword" : { "type" : "keyword" }, 
        "analyzed" : { "type" : "text", "analyzer" : "whitespace", "fielddata" : true } 
       } 
      } 
     } 
    } 
}