簡體   English   中英

Elasticsearch方面列表與結果不匹配

[英]Elasticsearch Facet List doesn't Match Results

問題

當我按特定構面篩選時,該特定字段的構面會在結果中正確過濾,但其他構面字段保持不變。 最好的解釋方法是查詢和響應。

詢問

{
    query: {
        match_all: {}
    }, 
    filter: {
        and: [{
            term: {
                "address.state": "oregon"
            }
        }]
    }, 
    facets: {
        "address.city": {
            terms: {
                field: "address.city"
            }, 
            facet_filter: {}
        }, 
        "address.state": {
            terms: {
                field: "address.state"
            }, 
            facet_filter: {
                and: [{
                    term: {
                        "address.state": "oregon"
                    }
                }]
            }
        }, 
        "address.country": {
            terms: {
                field: "address.country"
            }, 
            facet_filter: {}
        }
    }
}

結果

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
            {
                "_index": "races",
                "_type": "race",
                "_id": "6",
                "_score": 1,
                "_source": {
                    "id": 6,
                    "name": "Eugene Marathon",
                    "description": "...",
                    "created_at": "2015-05-24T19:41:45.043Z",
                    "updated_at": "2015-05-24T19:41:45.046Z",
                    "address": {
                        "race_id": 6,
                        "id": 7,
                        "line1": null,
                        "line2": null,
                        "city": "Eugene",
                        "state": "oregon",
                        "country": "united_states",
                        "zip": null,
                        "user_id": null,
                        "created_at": "2015-05-24T19:41:45.044Z",
                        "updated_at": "2015-05-24T19:41:45.044Z"
                    },
                    "race_years": []
                }
            }
        ]
    },
    "facets": {
        "address.city": {
            "_type": "terms",
            "missing": 0,
            "total": 7,
            "other": 0,
            "terms": [
                {
                    "term": "long beach",
                    "count": 1
                },
                {
                    "term": "lincoln",
                    "count": 1
                },
                {
                    "term": "las vegas",
                    "count": 1
                },
                {
                    "term": "jackson",
                    "count": 1
                },
                {
                    "term": "eugene",
                    "count": 1
                },
                {
                    "term": "duluth",
                    "count": 1
                },
                {
                    "term": "denver",
                    "count": 1
                }
            ]
        },
        "address.state": {
            "_type": "terms",
            "missing": 0,
            "total": 1,
            "other": 0,
            "terms": [
                {
                    "term": "oregon",
                    "count": 1
                }
            ]
        },
        "address.country": {
            "_type": "terms",
            "missing": 0,
            "total": 7,
            "other": 0,
            "terms": [
                {
                    "term": "united_states",
                    "count": 7
                }
            ]
        }
    }
}

因此,您可以看到,即使唯一的結果位於Eugene中,它也會返回所有address.city方面。 它還在united_states返回7的計數。 為什么它會返回所有這些額外方面並且計數錯誤? 我的紅寶石映射如下。

Ruby映射

settings index: {
  number_of_shards: 1,
  analysis: {
    analyzer: {
      facet_analyzer: {
        type: 'custom',
        tokenizer: 'keyword',
        filter: ['lowercase', 'trim']
      }
    }
  }
} do
  mapping do
    indexes :name, type: 'string', analyzer: 'english', boost: 10
    indexes :description, type: 'string', analyzer: 'english'
    indexes :address do
      indexes :city, type: 'string', analyzer: 'facet_analyzer'
      indexes :state, type: 'string'
      indexes :country, type: 'string'
    end
  end
end

當遇到過濾器時,這是構面的正常行為。 官方文檔中

要記住一個重要的區別。 雖然搜索查詢同時限制了返回的文檔和構面數量,但是搜索過濾器僅限制了返回的文檔,而沒有構面數量。

在您的情況下,您的查詢將匹配所有文檔(即match_all ),因此構面計數也將針對所有文檔進行計數。

將查詢更改為此,您的構面計數將發生變化(在這種情況下,您不再需要facet_filter ):

{
    query: {
        term: {
            "address.state": "oregon"
        }
    }, 
    facets: {
        "address.city": {
            terms: {
                field: "address.city"
            }
        }, 
        "address.state": {
            terms: {
                field: "address.state"
            }
        }, 
        "address.country": {
            terms: {
                field: "address.country"
            }
        }
    }
}

另一點值得注意的是, 各個方面已被棄用,並已被功能更強大的聚合所取代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM