我正在构建一个应用程序,用户根据条件查询产品的ElasticSearch数据库,然后返回三个最佳结果。 “最佳”的一部分意味着虽然三个结果必须符合标准,但我试图最大化它们之间的差异。例如,假设每个产品都有颜色,大小和年份,我查询所有年份为“2013”且尺寸“小”的产品我不想看到3个蓝色产品。我想说“找到符合标准的三个文件,然后尝试最大化不在标准中的字段的差异”。
我想我可以在客户端解决这个问题并返回三个以上的结果并在那里处理它,但我想知道是否有一种方法可以做到这一点而不返回比我需要的数据更多的数据。也许ElasticSearch不适合这里的工作,如果是这样的话:那是什么?
答案 0 :(得分:0)
尝试使用bool查询,类似于以下内容:
{
"bool" : {
"must" : {
},
"must_not" : {
"term" : { "color" : "blue" }
},
"should" : [
{
"term" : { "year" : "2013" }
},
{
"term" : { "size" : "small" }
}
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
有关详细信息,请参阅elasticsearch查询DSL: http://www.elasticsearch.org/guide/reference/query-dsl/bool-query/