我在理解用于形成GeoDistance查询的DSL语法时遇到一些问题(获取距离某点一定距离内的所有条目);
目前,在带有"places" -> "shops"
的ES索引id = 1
中,我有一个示例条目;
{
_index: "places",
_type: "shops",
_id: "1",
_version: 5,
found: true,
_source: {
location: {
lat: 50,
lon: 50
},
name: "coffee store",
posted: "2014-09-12T08:53:01.673Z"
}
}
然后,使用Elastic4s DSL,我建立了一个搜索查询;
val nearbyStoresFuture:Future[SearchResponse] = client execute {
search in "places" -> "shops" filter {
geoDistance("location") point(lat, lon) distance(distance)
}
}
nearbyStoresFuture onComplete {
case Success(s) => {
s
client.close
}
case Failure(t) => {
t
client.close
}
}
在这种情况下:
lat: Double = 50.0
lon: Double = 50.0
distance: String = "50km"
所以在任何情况下,如果查询是正确的,这应该给我包含ES中条目的结果,因为它与条目在同一点,因此在50km的距离内。
查询成功但结果为空。
编辑:以下是映射的外观;
ES.execute {
create index "places" mappings(
"shops" as (
"location" typed GeoPointType,
"name" typed StringType,
"posted" typed DateType
)
)
}
这有什么问题?
答案 0 :(得分:1)
这不是一个弹性问题,而是一个普遍的弹性搜索问题:tl; dr你没有索引任何字段。
索引数据时,指定索引哪些字段,然后将这些字段用于搜索。此外,您可以存储在搜索与该文档匹配时可以获取的文档。如果您希望能够返回原始文档,但希望在编制索引时使用字段子集或派生字段,这将非常有用。
在elastic4s
index into "myindex"->"mytype" fields ("name"->name, "location"->latlong) source srcdoc
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-source-field.html http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/index-doc.html