lucene - Elasticsearch 双面

标签 lucene elasticsearch

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

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},.....

因此,facet 分组是单独完成的(先按纬度再按经度)。

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

最佳答案

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

  • 向包含对本身的索引添加一个附加字段,然后在其上分面
  • 使用术语脚本即时创建纬度经度对。看看 documentation了解更多。这是一个应该有帮助的例子,试一试:
{
    "query" : {
        "match_all" : { }
    },
    "facets" : {
        "tags" : { 
            "terms" : {
                "field" : "latitude",
                "script" : "term + \"_\" + _source.longitude"
            }
        }
    }
}

关于lucene - Elasticsearch 双面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211732/

相关文章:

java - 如何使用 Lucene 的新 AnalyzingInfixSuggester API 实现自动建议?

java - Lucene 6 如何避免重复条目

indexing - 如何在ElasticSearch上自动创建索引?

elasticsearch - 如何在没有正则表达式的情况下使用脚本字段从日志字段中搜索子字符串

elasticsearch - Filebeat/Logstash 从输出中删除不需要的字段和值

elasticsearch - 将第二个主节点添加到现有Elasticsearch节点的正确方法

lucene - 无需保存数据的 Elasticsearch 引擎

lucene - 获取 ngram 频率时,Lucene 输出中的下划线带有停用词

mysql - SOLR DIH 在同一个 MySql 表上添加具有多个查询的文档

elasticsearch - ElasticsearchTransport使用变换来更改indexPrefix?