Elasticsearch中的范围查询不会筛选某些数字字段

时间:2017-10-01 02:54:33

标签: elasticsearch

我正在针对我的ES实例5.4运行以下查询。我的年份范围和邮政编码工作得很好,但是只要我在价格或范围范围内添加,它就会返回零结果。这是cURL语句(我将其转换为运行ES PHP库,因此我的语法可能不在此处。)

另外,我也提高了价格和价格。 milage到filter bool没有明显的结果。

在我的ES实例中,我有一个符合这个标准的铃木。

curl -XGET 'localhost:9200/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "query" : {
        "bool" : {
            "must" : {
                {"query_string" : {
                    "query" : "suzuki",
                    "fields" : {"keywords", "description", "title"}
                }},
                {"range" : {
                    "year.keyword" : {
                        "gte" : 2010,
                        "lte" : 1980
                    }
                }},
                {"range" : {
                    "price.keyword" : {
                        "gte" : 0,
                        "lte" : 10000
                    }
                }},
                {"range" : {
                    "mileage.keyword" : {
                        "gte" : 0,
                        "lte" : 100000
                    }
                }},
                {"terms" : {
                    "postal.keyword" : 57013
                }}
            }
        }
    },
    "highlight" : {
        "fields" : {
            "*" : { "force_source" : "true", "fragment_size" : 250 }
        }
    },
    "sort" : {
        "price.keyword" : { "order" : "asc", "mode" : "min" }
    }
}'

这是Suzuki ES记录(其中一些已被清除):

_source: {
index: "",
type: "",
keywords: "2009 Suzuki Sx4 Crossover AWD Crossover 4dr 4A",
description: "2009 Suzuki SX4 Crossover AWD Crossover 4dr 4A",
title: "2009 Suzuki Sx4 Crossover AWD Crossover 4dr 4A,
postal: "57013",
price: "5600",
year: "2009",
make: "Suzuki",
model: "sx4",
mileage: "93012",
engine: "2.0L I4",
transmission: "Automatic",
trim: "AWD Crossover 4dr ",
date_added: "2017-10-01 01:48:36",
date_updated: "2017-10-01 01:48:36"
}

1 个答案:

答案 0 :(得分:0)

我更新了几个字段的类型,这似乎可以解决问题。这是我最终发布到我的索引中的内容。

url -XPUT 'localhost:9200/my_index?pretty' -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "my_type": {
      "properties": {
        "price": {
          "type": "double"
        },
        "mileage": {
          "type": "integer"
        },
        "postal": {
          "type": "integer"
        },
        "year": {
          "type": "date",
          "format": "yyyy||epoch_millis"
        }
      }
    }
  }
}
'