我正在开发具有完成功能的简单搜索应用程序 . 我需要以某种方式保护这些建议,所以我发现最简单的方法是将完成建议器添加到上下文中 . 我的问题是我不知道如何在嵌套字段中使用建议上下文 .
这就是我的映射的样子,非常简单,只有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 回答
问题在于您的映射 . 默认不能为空 . 您需要在context suggester的映射中至少分配一个默认值 .
此外,在您尝试索引的文档中,您在
permitted
中使用string
,而它被映射为Integer
.