如何在有限的文档集上运行Elasticsearch完成建议器查询

时间:2017-07-10 10:06:20

标签: elasticsearch

我在单个字段中使用Elasticsearch中的完成建议器。该类型包含多个用户的文档。有没有办法将返回的建议限制为与特定查询匹配的文档?

我目前正在使用此查询:

{
  "name" : {
    "text" : "Peter",
    "completion" : {
      "field" : "name_suggest"
    }
  }
}

有没有办法将此查询与另一个查询相结合,例如

{
    "query":{
        "term" : {
            "user_id" : "590c5bd2819c3e225c990b48"
        }
    }
}

3 个答案:

答案 0 :(得分:1)

查看context suggester,它只是一个具有过滤功能的专业完成建议器 - 但是这仍然不是常规查询过滤器,请记住这一点。

答案 1 :(得分:0)

您可以在查询中指定查询和建议者,如下所示:

{
    "query":{
        "term" : {
            "user_id" : "590c5bd2819c3e225c990b48"
        }
    },
    "suggest": {
        "name" : {
            "text" : "Peter",
            "completion" : {
                "field" : "name_suggest"
            }
        }
    }
}

答案 2 :(得分:0)

我有一个类似的用例,我在弹性搜索论坛上发布了我的问题,请参阅AWS Tools For PowerShell

从我到目前为止所阅读的内容来看,我并不认为完成建议你可以限制文件。它们基本上在索引时创建一个有限状态传感器(前缀树),这使得它很快但你失去了对其他字段进行过滤的灵活性。我不认为上下文建议符合你的情况(如果我错了就告诉我),因为user_id的基数非常高。

我认为edge-ngrams部分匹配更灵活,可能实际上适用于您的用例。

让我知道你最终实施的内容。