1

我的问题是带有位置的亚马逊 cloudSearch ..

当我对具有位置的搜索产品使用排名表达式时发现此错误

       [“信息”]=>
  对象(stdClass)#16(4){
    [“摆脱”]=>
    字符串(80)“ee6c7090a20a654dbfd52a5f2ce0eeb96e766f609a8889bc1af02ab95e4065a6ce8ed690aa624373”
    [“时间-毫秒”]=>
    整数(4)
    [“CPU时间-毫秒”]=>
    整数(0)
    [“消息”]=>
    数组(2){
      [0]=>
      对象(stdClass)#17(3){
        [“严重性”]=>
        字符串(7)“警告”
        [“代码”]=>
        字符串(27)“CS-RankExpressionParseError”
        [“消息”]=>
        string(328) "无法解析排名表达式 (rank-geo=Math.sqrt(Math.pow(Math.abs(22345345-534534),2) Math.pow(Math.abs(934593495-34534534),2)) ):ANTLR 解析器返回:-memory-(1):错误 10:缺少令牌,偏移量 47
    附近 [索引:0(开始:0-停止:0)='',类型 <7> 行:1 LinePos:47]
     : 缺少 RPAREN
"
      }
      [1]=>
      对象(stdClass)#18(3){
        [“严重性”]=>
        字符串(7)“警告”
        [“代码”]=>
        string(41) "CS-InvalidFieldOrRankAliasInRankParameter"
        [“消息”]=>
        string(47) "无法为等级 'bininet' 创建分数对象"
      }
    }
  }

而我的搜索请求网址是

htp://www.search_endpoint."/search?bq=".urlencode($term)."&rank=geo&rank-geo=Math.sqrt(Math.pow(Math.abs(22345345 - 534534),2)+Math .pow(Math.abs(934593495 - 34534534),2))&size=$size&start=$start&return-fields=".implode(',',$return_fields

我在哪里做错了?没有等级表达它工作正常。我认为错误出现在位置的定义表达式中,但找不到任何其他解决方案请帮助我。

谢谢

4

1 回答 1

0

我通过使用找到了解决方案

  &rank-geo=urlencode('Math.sqrt(Math.pow(Math.abs(22345345 - doc.latitude),2)+Math.pow(Math.abs(934593495 - doc.longitude),2))')

这是排名表达式示例

您可以通过两种方式在亚马逊云搜索中使用自定义排名表达式

  1. 在亚马逊云搜索控制台管理面板中创建一个新的排名表达式并定义表达式,即数学表达式,在搜索 url 中只需附加该排名表达式名称,如下所示

    &rank=geo // 地理排名表达式应该在云搜索控制台管理面板上定义

  2. 第二种方式是在搜索 url 中以动态方式包含排名名称和表达式

     &rank=distancesearch&rank-distancesearch=urlencode('Math.sqrt(Math.pow(Math.abs(22345345 - doc.latitude),2)+Math.pow(Math.abs(934593495 - doc.longitude),2))')
    

    这样就不需要在 amazon cloudSearch 控制台管理面板上做排名表达式

于 2013-07-05T12:48:07.710 回答