我目前正在评估ElasticSearch中的完成建议器功能,以实现自动完成。到目前为止确实很像样。然而,我有点为权限而挣扎。
让我们假设我在ElesticSearch网站上有一个酒店索引,比如这个例子。除了得到与给定短语相匹配的酒店,我还想检查用户是否被允许看到“建议”。就像只为特定客户服务的酒店。我添加了一个用于保存组/权限的新字段,就像用于测试的简单字符串一样。我想要完成的是按组过滤。
映射看起来应该是这样的:
{
"mappings": {
"hotel" : {
"properties" : {
"name" : { "type" : "string" },
"city" : { "type" : "string" },
"group" : { "type" : "string" },
"name_suggest" : {
"type" : "completion",
"payloads" : true
}
}
}
}
}'并附有下列文件:
{
"name" : "Mercure Hotel Munich",
"city" : "Munich",
"group " : "1",
"name_suggest" : "Mercure Hotel Munich"
}'
{
"name" : "Monaco Hotel",
"city" : "Munich",
"group" : "2",
"name_suggest" : "Monaco Hotel"
}'因此,如果用户与组“1”是进入“M”,他应该只得到“美爵酒店慕尼黑”。反之亦然,组“2”的用户输入的是“M”,他只能输入“摩纳哥酒店”。
我在Stackoverflow上看到了一些类似的文章,内容涉及完成建议+过滤器,而且它不一起工作。
在我看来,某些文档是为特定用户提供的,这并不是一个不寻常的用例。因此,我不想建议任何用户不允许访问的内容。
因此,我的问题是:实现这一目标的最佳做法是什么?我的意思是考虑即将推出的ES版本的性能和可维护性。
我们是否应该坚持使用edgeNGram解决方案,直到https://github.com/elasticsearch/elasticsearch/pull/4044集成为止?或者通过使用完成提示器还有其他的解决方案吗?
提亚
发布于 2014-02-05 11:08:27
完成提示器根本不使用传统的搜索,所以你不能自动地过滤你的建议。你有几个选择:
payloads: true,但是您似乎并没有使用它们。如果您只有几个groups,那么可以将它们包含在有效负载中,并在应用程序中筛选出无效的建议。groups,您就可以等待ContextSuggester合并。发布于 2014-10-28 16:33:32
https://stackoverflow.com/questions/21553965
复制相似问题