Cloudant搜索字段已编入索引,没有位置数据;无法运行PhraseQuery

时间:2017-05-19 19:21:24

标签: lucene couchdb cloudant nosql

我有以下Cloudant搜索索引

"indexes": {
    "search-cloud": {
        "analyzer": "standard",
        "index": "function(doc) {

            if (doc.name) {
                index("keywords", doc.name);
                index("name", doc.name, {
                    "store": true,
                    "index": false
                });
            }

            if (doc.type === "file" && doc.keywords) {
                index("keywords", doc.keywords);
            }

        }"
    }
}

出于某种原因,当我搜索特定短语时,我收到错误:

  

搜索失败:字段"关键字"被索引没有位置数据;无法运行PhraseQuery(term = FIRSTWORD

所以如果我搜索 FIRSTWORD SECONDWORD ,看起来我的第一个单词出错了。

注意:我的每个搜索词都不会发生这种情况。

有谁知道为什么会发生这种情况?

doc.namedoc.keywords只是字符串。

doc.name通常类似于" 2004/04/14 John Doe 1234文档文件夹"

doc.keywords通常是随机的,例如"再次测试它"

我在关键字索引下存储名称和关键字的原因是因为我希望任何人只需键入字符串值就可以搜索关键字或名称。如果这不是最佳做法,请告诉我。

1 个答案:

答案 0 :(得分:2)

可能问题是您的某些文档包含带有字符串值的keywords字段,而其他文档包含具有不同类型的keywords字段,可能是数组。我相信这种情况会导致您收到的错误。您能否仔细检查keywords字段的所有值是否实际上都是字符串?