0

我正在构建一个应用程序,其中用户根据条件查询产品的 ElasticSearch 数据库,然后返回三个最佳结果。“最好”的一部分意味着虽然三个结果必须符合标准,但我试图最大化它们之间的差异。例如,假设每个产品都有颜色、尺寸和年份,我对年份为“2013”​​且尺寸为“小”的所有产品进行查询,我不想看到 3 个蓝色产品。我想说“找到三个符合标准的文档,然后尝试最大化不在标准中的字段的差异”。

我想我可以在客户端解决这个问题并返回三个以上的结果并在那里处理它,但我想知道是否有一种方法可以在不返回比我需要的更多数据的情况下做到这一点。也许 ElasticSearch 不是适合这里工作的工具,如果是这样的话:什么是?

4

1 回答 1

0

尝试使用 bool 查询,类似于以下内容:

{
    "bool" : {
        "must" : {            
        },
        "must_not" : {
            "term" : { "color" : "blue" }
        },
        "should" : [
            {
                "term" : { "year" : "2013" }
            },
            {
                "term" : { "size" : "small" }
            }
        ],
        "minimum_should_match" : 1,
        "boost" : 1.0
    }
}

有关更多信息,请参阅弹性搜索查询 DSL: http ://www.elasticsearch.org/guide/reference/query-dsl/bool-query/

于 2013-07-08T13:55:04.337 回答