MarkLogic GeoSpatial查询不返回任何分数

时间:2019-12-02 05:52:57

标签: geospatial marklogic

我了解默认情况下地理空间查询不会添加分数,但是我发现添加适当的选项后,地理空间查询仍然不会添加分数

const jsearch = require('/MarkLogic/jsearch.sjs');  
jsearch.documents()   
        .where(
                 cts.jsonPropertyGeospatialQuery("coordinates",
                 cts.circle(45,cts.point(-28.81354,153.2773)),
                  ["score-function=reciprocal", "slope-factor=10.0","type=long-lat-point","units=km"]
                     ,1.0)


         )
        .slice(0,100)       
      .map({snippet: true})
      .result()

返回以下内容

{
   "results": [
      {
        "uri": "/A/URI/5797f1514689edaf278d2f9e.json", 
         "index": 0, 
         "matches": [
               {
"path": "fn:doc(\"/A/URI/5797f1514689edaf278d2f9e.json\")/object-node()", 
      "matchText": [
           ..."


       ]
}, ...

不包括分数。

谁能解释为什么没有分数或我怎么能得到分数?

请参阅附件中的工作区。这是对地理空间教程的更改。 我对此有以下疑问。

谁能解释为什么只有 cts.search 会将返回值集减少为一条匹配记录?

cts.uris 返回具有字段坐标的所有坐标,但不将其简化为圆圈内的文档。如果查询默认是未经过滤的,为什么要完全通过查询?

jsearch的返回结果与cts.uris相同,但我可以接受,但是为什么所有分数都为0,一个分数应该恰好位于圆心。

Workspace

1 个答案:

答案 0 :(得分:1)

应用.map({snippet: true})时,jsearch实现将仅在这些属性的值存在且不等于0时包括这些属性。

如果删除.map({snippet: true}),您将在结果中看到scoreconfidencefitness。我怀疑您会发现它们都等于0

如果您仍然希望这些属性出现在结果中,则可以在事实之后有条件地将其添加:

const jsearch = require('/MarkLogic/jsearch.sjs');  
let result = jsearch.documents()   
        .where(
          cts.jsonPropertyGeospatialQuery("coordinates",
             cts.circle(45,cts.point(-28.81354,153.2773)),
             ["score-function=reciprocal", "slope-factor=10.0","type=long-lat-point","units=km"],
             1.0)
         )  
        .slice(0,100)  
        .map({snippet: true})
        .result();

result.results.forEach(r => ["score","fitness","confidence"].forEach(p => r[p] ? null : r[p]=0));

result;