首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarkLogic GeoSpatial查询不返回分数

MarkLogic GeoSpatial查询不返回分数
EN

Stack Overflow用户
提问于 2019-12-02 05:52:57
回答 1查看 77关注 0票数 1

我理解地理空间查询在默认情况下不会添加分数,但当添加适当的选项时,我发现它们仍然没有添加:

代码语言:javascript
复制
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()

返回以下内容

代码语言:javascript
复制
{
   "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,一个应该正好位于圆圈的中心。

工作区

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-02 20:36:08

接着,问题已从我最初的答复中更新。工作空间有助于理解正在发生的事情。

您正在/location/coords上创建一个地理空间路径索引,但使用的是cts.jsonPropertyGeospatialQuery,它无法利用该索引。如果您的地理空间查询条件没有适当的支持索引,则需要依赖筛选。

相反,您应该使用cts.pathGeospatialQuery,这样它就可以利用地理空间索引来提供快速而准确的未经过滤的结果,而不必依赖于过滤。

代码语言:javascript
复制
cts.pathGeospatialQuery("/location/coords", circle, ['units=km'], 1.0)

至于为什么在搜索结果中没有返回score,似乎是因为指定了不正确的选项type=long-lat-point。索引值为type=point

当我指定type=point或删除类型选项时,将返回一个非零分数.

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

如果删除.map({snippet: true}),您将在结果中看到scoreconfidencefitness

如果发现它们确实丢失或等于0,并且仍然希望这些属性出现在结果中,则可以在事实之后有条件地添加它们:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59133331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档