我如何获得独特的结果?

时间:2019-05-12 13:35:43

标签: elasticsearch

我想做的是查询弹性搜索(版本6.4),以获得唯一的搜索结果(名为eids)。我做了如下查询。我想做的是首先从两个字段分别名为eLabel和pLabel的文本搜索,并获得不同的结果称为eid。但是实际上结果并没有汇总,显示的id从0到超过20。该如何调整查询?

{
  "query": {
    "multi_match": {
      "query": "Brazil Capital",
      "fields": [
        "eLabel",
        "pLabel"
      ]
    }
  },
  "size": 200,
  "_source": [
    "eid",
    "eLabel"
  ],
  "aggs": {
    "eids": {
      "terms": {
        "field": "eid"
      }
    }
  }
}

我当前的映射如下。

  • eid:实体的ID
  • eLabel:实体标签(例如巴西)
  • prop_id:实体的属性ID(eid)
  • pLabel:属性的标签(例如,...的大写字母,位于...)
  "mappings": {
    "entity": {
      "properties": {
        "eLabel": {
          "type": "text" ,
          "index_options": "docs" ,
          "analyzer": "my_analyzer"
        } ,
        "eid": {
          "type": "keyword"
        } ,
        "subclass": {
          "type": "boolean"
        } ,
        "pLabel": {
          "type": "text" ,
          "index_options": "docs" ,
          "analyzer": "my_analyzer"
        } ,
        "prop_id": {
          "type": "keyword"
        } ,
        "pType": {
          "type": "keyword"
        } ,
        "way": {
          "type": "keyword"
        } ,
        "chain": {
          "type": "integer"
        } ,
        "siteKey": {
          "type": "keyword"
        },
        "version": {
          "type": "integer"
        },
        "docId": {
          "type": "integer"
        }
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

根据您的评论,您可以使用Bool使用以下查询。不要认为聚合查询有什么问题,只需将您的查询替换为我提到的bool查询,我认为就足够了。

使用multi_match查询时,即使文档包含eLabel = "Rio is capital of brazil"pLabel = "something else entirely here"

,它也会进行检索。
POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "eLabel": "capital"
          }
        },
        {
          "match": {
            "pLabel": "brazil"
          }
        }
      ]
    }
  },
  "size": 200,
  "_source": [
    "eid",
    "eLabel"
  ],
  "aggs": {
    "eids": {
      "terms": {
        "field": "eid"
      }
    }
  }
}

请注意,如果只需要eid的值,而不想要文档,则可以在上述查询中设置"size":0。这样,您将只返回聚合结果。

让我知道这是否有帮助!