2017-07-10 29 views
0

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

我目前使用此查询:

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

有没有办法这个查询与一个不同的,例如结合

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

回答

1

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

0

您可以指定查询和查询的建议者,这样的:

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

此查询还返回包含文档的结果,该文档没有匹配的user_id字段。 – Joba

0

我有一个类似用途的情况下,我已经张贴了我的弹性搜索论坛的问题,请参见here

从我至今读,我不认为与完成建议者,你可以限制文件。它们在索引时基本上创建了一个有限状态转换器(前缀树),这使得它变得很快,但是失去了在其他字段上过滤的灵活性。我不认为情境提示程序会在你的情况下工作(让我知道如果我错了),因为user_id的基数非常高。

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

让我知道你最终实现了什么。

+0

我实际上跟@alr建议的上下文建议。我正在为少量用户构建服务,并为每个用户提供许多文档,因此上下文建议人员应该可以正常工作。 – Joba

相关问题