6

我想运行一个弹性搜索查询,它通过两个不同字段(纬度和经度)的组合对数据进行分组

curl -XGET http://www.my_server:9200/idx_occurrence/Occurrence/_search?pretty=true -d '{  
    "query": { 
        "query_string" : { 
            "fields" : ["genus_interpreted","dataset"], 
            "query": "Pica 2", 
            "default_operator" : "AND" 
         } 
    }, 
    "facets": { 
        "test": { 
            "terms": { 
                "fields" :["decimalLatitude","decimalLongitude"],
                "size" : 500000000 
            } 
        } 
    } 
}'

它给出的结果是预期的两倍……有什么想法吗?

答案中更相关的部分是......

_shards":{
    "total":5,
    "successful":5,
    "failed":0
},
"hits":{
    "total":**37**,
    "max_score":3.9314494,
    "hits":[{

如果我不应用构面,则总命中数为 37 是查询的结果。这个总数是方面总数的一半(见下文)

"facets":{
    "test":{
        "_type":"terms",
        "missing":0,
        "total":**74**,
        "other":0,
        "terms":[
           {"term":"167.21665954589844","count":5},
           {"term":"167.25","count":4},
           {"term":"167.14999389648438","count":4},
           {"term":"167.1041717529297","count":4},
           {"term":"-21.04166603088379","count":4},.....

因此,分面分组是单独完成的(按纬度,然后按经度)。

请注意,我不能仅按纬度或经度进行分组,因为多个记录可以共享纬度(但经度不同),反之亦然。

4

1 回答 1

4

您正在多个字段上创建一个 TermsFacet:纬度和经度。这意味着纬度和经度被聚合在一起,因为它们是一个独特的字段。您会看到每个单个值的条目,可以是纬度或经度。您返回 74 个条目的事实证明您的索引中有 74 个不同的纬度和经度值,这是有道理的。你到底想达到什么目的?每个纬度经度对的一个方面条目?在这种情况下,您有两种选择:

  • 向包含该对本身的索引添加一个附加字段,然后对其进行刻面
  • 使用术语脚本动态创建纬度经度对。查看文档以了解更多信息。这是一个应该有帮助的例子,试一试:
{
    "query" : {
        "match_all" : { }
    },
    "facets" : {
        "tags" : { 
            "terms" : {
                "field" : "latitude",
                "script" : "term + \"_\" + _source.longitude"
            }
        }
    }
}
于 2012-08-31T11:14:58.730 回答