首页 文章

嵌套字段的Elasticsearch完成建议上下文

提问于
浏览
3

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

这就是我的映射的样子,非常简单,只有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}

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

1 回答

  • 3

    问题在于您的映射 . 默认不能为空 . 您需要在context suggester的映射中至少分配一个默认值 .

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

    如果没有为特定上下文提供特定字段,则使用默认字段的值 . 请注意,上下文由至少一个值定义 .

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

    "permitted": ["2"] // <-- change this to "permitted":[2]
    

相关问题