将分析的字段聚合为纯文本而不是Elasticsearch中的术语

时间:2016-03-03 10:42:25

标签: elasticsearch lucene aggregate

因此,我们的Elasticsearch集群存在问题,我们通过该集群创建了一些使用某个字段创建的旧分析“已分析”。现在,此字段可以包含“ - ”或“_”符号,我们的一个查询将按此字段进行聚合。 由于正在分析此字段,如果它包含任何这些字符,则它将按其包含的每个字进行聚合。即:

  

“analyzeField”:“我喜欢苹果”

当我们抛出一个由它聚合的查询时:

{
"query":{
  "filtered":{
     "filter":{
        [...]
     }
  }
 },
"aggs":{
 "type":{
     "terms":{
         "field":"analyzedField"
           }
        }
    }
}

它返回由字段的每个术语聚合的结果,如:

{
 "took": 13,
 "timed_out": false,
 "_shards": {
   "total": 10,
   "successful": 10,
   "failed": 0
 },
 "hits": {
   "total": 192,
   "max_score": 0,
   "hits": []
 },
 "aggregations": {
       "type": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
           {
             "key": "I",
             "doc_count": 192
           },
           {
             "key": "like",
             "doc_count": 192
           },
           {
             "key": "apples",
             "doc_count": 192
           }

而不是像:

{
 "took": 1,
 "timed_out": false,
 "_shards": {
   "total": 10,
   "successful": 10,
   "failed": 0
 },
 "hits": {
   "total": 1,
   "max_score": 0,
   "hits": []
 },
 "aggregations": {
      "type": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
          {
            "key": "I-like-apples",
            "doc_count": 192
          }
  • 不幸的是,由于它们的大小,将该字段重新创建为“未分析”并不是一种选择。

  • 那么,我们还有其他选择吗?可以某种方式修改映射,以便它不再完全重新创建索引就停止分析该字段吗?

  • 我们如何修改它的查询,将该字段视为纯文本而不是术语?

我的ElasticSearch知识相当基础,如果我写了一些废话,请原谅。

谢谢 问候

0 个答案:

没有答案