首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找最佳实践来过滤来自完成建议者的建议

寻找最佳实践来过滤来自完成建议者的建议
EN

Stack Overflow用户
提问于 2014-02-04 13:33:19
回答 2查看 3.1K关注 0票数 5

我目前正在评估ElasticSearch中的完成建议器功能,以实现自动完成。到目前为止确实很像样。然而,我有点为权限而挣扎。

让我们假设我在ElesticSearch网站上有一个酒店索引,比如这个例子。除了得到与给定短语相匹配的酒店,我还想检查用户是否被允许看到“建议”。就像只为特定客户服务的酒店。我添加了一个用于保存组/权限的新字段,就像用于测试的简单字符串一样。我想要完成的是按组过滤。

映射看起来应该是这样的:

代码语言:javascript
复制
{
  "mappings": {
    "hotel" : {
      "properties" : {
        "name" : { "type" : "string" },
        "city" : { "type" : "string" },
        "group" : { "type" : "string" },
        "name_suggest" : {
          "type" : "completion",
          "payloads" : true
        }
      }
    }
  }
}'

并附有下列文件:

代码语言:javascript
复制
{
  "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集成为止?或者通过使用完成提示器还有其他的解决方案吗?

提亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-05 11:08:27

完成提示器根本不使用传统的搜索,所以你不能自动地过滤你的建议。你有几个选择:

  1. 您已经指定了payloads: true,但是您似乎并没有使用它们。如果您只有几个groups,那么可以将它们包含在有效负载中,并在应用程序中筛选出无效的建议。
  2. 同样,只要使用几个groups,您就可以等待ContextSuggester合并。
  3. 检索比您需要的更多的建议,然后运行一个搜索,它将过滤出无效的结果。
  4. 使用边缘-ngram方法。
票数 0
EN

Stack Overflow用户

发布于 2014-10-28 16:33:32

根据1.2.0版本,您可以向建议者添加上下文并获得筛选的建议。

博客介绍性文章

全博士

还请参见如何在ElasticSearch中向完成提示器添加筛选器?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21553965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档