4

我正在开发具有完成功能的简单搜索应用程序。我需要以某种方式保护这些建议,所以我想出最简单的方法是将上下文添加到完成建议器中。我的问题是我不知道如何在嵌套字段中使用建议上下文。

这就是我的映射的样子,非常简单,只有 3 个字段和一个嵌套字段。

curl-XPUT'http: //localhost: 9200/cr/_mapping/agreement_index'-d'{
    "agreement_index": {
        "properties": {
            "agreement_name": {
                "type": "string",
                "fields": {
                    "suggest": {
                        "type": "completion",
                        "analyzer": "simple",
                        "payloads": false,
                        "preserve_separators": true,
                        "preserve_position_increments": true,
                        "max_input_length": 50,
                        "context": {
                            "permitted": {
                                "type": "category",
                                "path": "permitted",
                                "default": []
                            }
                        }
                    }
                }
            },
            "permitted": {
                "type": "integer"
            },
            "team": {
                "type": "nested",
                "dynamic": "false",
                "properties": {
                    "email": {
                        "type": "string",
                        "fields": {
                            "raw": {
                                "type": "string",
                                "index": "not_analyzed"
                            },
                            "suggest": {
                                "type": "completion",
                                "analyzer": "simple",
                                "payloads": false,
                                "preserve_separators": true,
                                "preserve_position_increments": true,
                                "max_input_length": 50,
                                "context": {
                                    "permitted": {
                                        "type": "category",
                                        "path": "permitted",
                                        "default": []
                                    }
                                }
                            }
                        }
                    },
                    "name": {
                        "type": "string",
                        "fields": {
                            "raw": {
                                "type": "string",
                                "index": "not_analyzed"
                            },
                            "suggest": {
                                "type": "completion",
                                "analyzer": "simple",
                                "payloads": false,
                                "preserve_separators": true,
                                "preserve_position_increments": true,
                                "max_input_length": 50,
                                "context": {
                                    "permitted": {
                                        "type": "category",
                                        "path": "permitted",
                                        "default": []
                                    }
                                }
                            }
                        }
                    },
                    "permitted": {
                        "type": "integer"
                    }
                }
            }
        }
    }
}'

在这样的索引文档期间:

curl-XPUT'http: //localhost: 9200/cr/agreement_index/1'-d'{
    "agreement_name": "QWERTY",
    "team": [{
        "name": "Tomasz Sobkowiak",
        "permitted": ["2"],
        "email": "tsobkowiak@fake.com"
    }],
    "permitted": ["2"]
}'

我收到以下错误:

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"one or more prefixes needed"}],"type":"illegal_argument_exception","reason":"one or more prefixes needed"},"status":400}

从嵌套字段中的完成建议中删除上下文后,一切正常。所以我的问题是,如何在嵌套字段中使用上下文建议器,路径指向外部文档中的字段?这样的事情可能吗?

4

1 回答 1

3

问题出在您的映射中。默认值不能为空。您需要在contextSuggester的映射中分配至少一个默认值。

    "context": {
        "permitted": {
            "type": "category",
            "path": "permitted",
            "default": [] // <-- defaults can not be empty, provide at least one default integer value
        }
}

当没有为特定上下文提供特定值时,将使用默认字段的值。请注意,上下文由至少一个值定义。

此外,在您尝试索引的文档中,您正在使用stringinpermitted而它被映射为Integer.

"permitted": ["2"] // <-- change this to "permitted":[2]
于 2016-03-19T02:51:17.037 回答