我正在使用Dynamo和Amazon ElasticSearch服务在AWS上整理一个概念验证,但我遇到了一些麻烦
我已经检查过ES仪表板并看到以下内容......
我有一个索引[assets]和一个映射[asset_types]。下面是一些映射的示例,以及相关位置
POST assets/_search
{
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"General.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
我希望地理位置搜索位于“General.location”字段中。到目前为止,我已经尝试了几个不同的查询而没有任何运气,但我确信我错过了一些相当明显的问题。
一个来自官方文档here,修改为下面的结果,出现此错误: “原因”:“未能解析搜索源。未知搜索元素[bool]”,
POST assets/_search
{
"filter" : {
"geo_distance" : {
"distance" : "1km",
"General.location" : {
"lat" : 40,
"lon" : -70
}
}
},
"query" : {
"match_all" : {}
}
}
我也尝试过稍微不同的查询,引发“”原因“:”找不到geo_point字段[General.location]“
prod
我是否错误地运行了查询?我是否需要更新索引中的映射以指定地理索引?我想如果我正确地格式化了那些不是必需的字段。
由于
答案 0 :(得分:0)
问题在于您的映射,其中General.location
字段未正确映射。这就是您收到错误failed to find geo_point field
所以而不是
General [this is a map]
location
lat *string*
lon *string*
你需要
General [this is a map]
location *geo_point*
因此,您需要相应地修改映射并重新索引数据。
您遇到的第二个问题是您的第一个查询需要包含在query
部分中:
POST assets/_search
{
"query" : {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"General.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
一旦您解决了这两个问题,您就可以成功运行查询。
答案 1 :(得分:0)
除了Val所说的,我还为位置
创建了一个新的映射我明确地为此创建了一个映射。请注意其他新手,我需要使用嵌套属性更新来创建“General.deviceLocation”。在我这样做之后,Val的更新查询起作用了。
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();