【问题标题】:Cloudant Search Queries Index FunctionCloudant 搜索查询索引功能
【发布时间】:2015-12-22 01:06:53
【问题描述】:

我找不到太多关于如何正确定义索引函数的文档,以便我可以对我需要的信息进行全文搜索。

我使用 Alchemy API 将“实体”json 添加到我的文档中。 例如,我有一个包含以下内容的文档:

"_id": "redacted",
"_rev": "redacted",
"session": "20152016",
"entities": [


    {
      "relevance": "0.797773",
      "count": "3",
      "type": "Organization",
      "text": "California Constitution"
    },
    {
      "relevance": "0.690092",
      "count": "1",
      "type": "Organization",
      "text": "Governors Highway Safety Association"
    }
]

我找不到任何代码 sn-ps 显示如何构造一个查看嵌套 json 的搜索索引函数。

我对整个对象的索引似乎不正确。 这是完整的设计文档:

    {
  "_id": "_design/entities",
  "_rev": "redacted",
  "views": {},
  "language": "javascript",
  "indexes": {
    "entities": {
      "analyzer": "standard",
      "index": "function (doc) {\n  if (doc.entities.relevance > 0.5){\n      index(\"default\", doc.entities.text, {\"store\":\"yes\"});\n  }\n\n}"
    }
  }
}

格式更清晰一点的搜索索引是

function (doc) {
  if (doc.entities.relevance > 0.5){
      index("default", doc.entities.text, {"store":"yes"});
  }

}

按照下面的建议添加 for 循环很有意义。 但是,我仍然无法返回任何结果。 我的查询是 "https://user.cloudant.com/calbills/_design/entities/_search/entities?q=Governors"

服务器响应是: {"total_rows":0,"bookmark":"g2o","rows":[]}

【问题讨论】:

标签: lucene cloudant


【解决方案1】:

“for..in”样式循环似乎不起作用。 但是,我确实使用更标准的 for 循环获得了结果。

function (doc) {
  if(doc.entities){
    var arrayLength = doc.entities.length;
    for (var i = 0; i < arrayLength; i++) {
    if (parseFloat(doc.entities[i].relevance) > 0.5)
    index("default", doc.entities[i].text);
}
}
}

干杯!

【讨论】:

    【解决方案2】:

    您需要循环 doc.entities 数组中的元素。

    function (doc) {
      for(entity in doc.entities){
        if (parseFloat(entity.relevance) > 0.5){
          index("default", entity.text, {"store":"yes"});
        }
      }
    }
    

    【讨论】:

    • 好的,这是有道理的。为什么 doc.entities.relevance 存在呢?
    • 我想我有一个错字。再看一遍。
    • 啊...相关性的值是一个字符串。您需要将其转换为浮点数。
    • 正要问这是否重要。即使改变了它,我仍然没有得到任何结果。事实上,即使没有相关性条件,我也没有得到任何结果。以上内容是否足以作为独立的索引器?我需要索引ID吗?我是否需要先确保每个文档都有 doc.entities?感谢您一直以来的帮助
    • 另外,查看@brobes 对indexing and searching arrays with Cloudant Query的回答
    【解决方案3】:

    这是我尝试过的:

    function(doc){
       if(doc.entities){
       for( var p in doc.entities ){
             if (doc.entities[p].relevance > 0.5)
              { 
                 index("entitiestext", doc.entities[p].text, {"store":"yes"});
               }      
            }
         }
    }
    

    使用的查询字符串:"q=entitiestext:California Constitution&include_docs=true" 结果:

    {
    "total_rows": 1,
    "bookmark": "xxxx",
    "rows": [
        {
            "id": "redacted",
            "order": [
                0.03693288564682007,
                1
            ],
            "fields": {
                "entitiestext": [
                    "Governors Highway Safety Association",
                    "California Constitution"
                ]
            },
            "doc": {
                "_id": "redacted",
                "_rev": "4-7f6e6db246abcf2f884dc0b91451272a",
                "session": "20152016",
                "entities": [
                    {
                        "relevance": "0.797773",
                        "count": "3",
                        "type": "Organization",
                        "text": "California Constitution"
                    },
                    {
                        "relevance": "0.690092",
                        "count": "1",
                        "type": "Organization",
                        "text": "Governors Highway Safety Association"
                    }
                ]
            }
        }
    ]
    

    }

    使用的查询字符串:q=entitiestext:加州宪法

    结果:

     {
    "total_rows": 1,
    "bookmark": "xxxx",
    "rows": [
        {
            "id": "redacted",
            "order": [
                0.03693288564682007,
                1
            ],
            "fields": {
                "entitiestext": [
                    "Governors Highway Safety Association",
                    "California Constitution"
                ]
            }
        }
    ]
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2018-10-17
      相关资源
      最近更新 更多