我是否可以为"应该"指定后备首选项?查询?

时间:2014-06-09 21:02:23

标签: elasticsearch

如果索引中有两个文档,localeenpt

{
  "slug": "my-object",
  "locale": "en",
}

{
  "slug": "my-object",
  "locale": "pt",
}

我运行一个查询,其结果位于我不具备的区域设置fr

{
  "query": {
    "bool": {
      "must":  [{ "term": { "slug":   "my-object" } }],
      "should":[{ "term": { "locale": "fr" } }]
    }
  },
  "size": 1
}

有没有办法让它只回归到en区域设置的文档,而不是pt或其他任何文档?

基本上,我想说" 应该是法语,但我也会接受英语。"

1 个答案:

答案 0 :(得分:1)

好消息!看起来最近为1.3版本发布的更新应该允许它在一般情况下工作(超过1个结果,支持分页)。它不是"应该"的形式。但是,查询称为top_hits聚合器:

https://github.com/elasticsearch/elasticsearch/pull/6124 https://github.com/elasticsearch/elasticsearch/issues/6299

如果您只需要一个响应或一个已知的小响应集应用逻辑客户端可能是以最少的努力实现这一目标的最简单方法。所以,你做了一个应该" en"," fr"并且如果fr回来则忽略en。

另一种选择是对数据建模,以便进一步对事物进行非规范化。因此,在同一文档中包括slug的所有变体可以简化事情。这可能会增加其他并发症,所以YMMV。