如果使用“fields []”指定,则似乎会忽略结果中的geo_point字段
我具有索引test01的以下映射
{
"test01": {
"mappings": {
"activity": {
"properties": {
"location": {
"type": "string"
},
"mygeo": {
"type": "geo_point",
"doc_values": true,
"fielddata": {
"format": "compressed",
"precision": "1km"
}
}
}
}
}
}
}
索引包含一个 Activity
{
"mygeo": {
"lat": 51.247607909,
"lon": 22.565701278
},
"location" : "New York"
}
询问
GET /test01/_search
{
"size" : 1,
"fields": ["location", "mygeo"]
}
在缺少mygeo字段的地方生成以下内容。 (我也尝试过“字段”:[“位置”,“mygeo.lat”,“mygeo.lon”,“mygeo”])。
"hits": [
{
"_index": "test01",
"_type": "activity",
"_id": "1",
"_score": 1,
"fields": {
"location": [
"New York"
]
}
}
]
我可以获得mygeo对象的唯一方法是通过添加“_source”:{“includes”:[“mygeo”]}通过_source。
有什么方法可以使用“field”参数获取geo_point字段吗?
我已经尝试过Rest API和Java API。两者都使用Elasticsearch 1.7.1版产生相同的结果。
谢谢
最佳答案
因此,按照逻辑,我通过在您的索引映射中添加"store": true
来复制并解决了该问题,现在它允许我使用fields
而不是_source
来检索lon / lat。
请查看在本地主机上对Sense进行的复制:
DELETE test
PUT /test
{
"mappings": {
"test1": {
"properties": {
"location": {
"type": "string"
},
"mygeo": {
"type": "geo_point",
"doc_values": true,
"store": true,
"fielddata": {
"format": "compressed",
"precision": "1km"
}
}
}
}
}
}
POST /test/test1/
{
"mygeo": {
"lat": 51.247607909,
"lon": 22.565701278
},
"location": "New York"
}
GET /test/_search
{
"size" : 1,
"fields": ["location", "mygeo"]
}
因此,此查询确实带回了您期望的结果。唯一的问题是您的局域网/局域网被格式化为数组。查看查询结果:
{
"hits" : [{
"_index" : "test",
"_type" : "test1",
"_id" : "AVCGqhsq9y2W0mh1rPgV",
"_score" : 1,
"fields" : {
"mygeo" : [
"51.247607909,22.565701278"
],
"location" : [
"New York"
]
}
}
]
}
但是,这是Elasticsearch正式支持的格式之一。取自documentation:
另外,请注意以下文档:
关于elasticsearch - Elasticsearch响应中缺少geo_point字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33132731/