【问题标题】:ElasticSearch: How to query in sub-groups?ElasticSearch:如何在子组中查询?
【发布时间】:2015-02-09 15:52:02
【问题描述】:

我有存储用户知道的技能的文档:

{
"size": 1000,
"query": {
    "function_score": {
        "query": {
            "bool": {
                "should": [
                    {
                        "query_string": {
                            "query": "Objective-C",
                            "default_field": "user.skill.name"
                        }
                    },
                    {
                        "range": {
                            "user.skill.weight_relative": {
                                "gte": 1
                            }
                        }
                    },
                    {
                        "range": {
                            "user.skill.weight_absolute": {
                                "gte": 1
                            }
                        }
                    },
...

我遇到的问题是,ElasticSearch 正在返回用户,例如 skill.name == Objective-C,但相对权重和绝对权重均为 0,以及得分大于 1 的用户,但 Skill.name 完全是不同。

有没有办法告诉弹性我不希望这些搜索是“本地”范围的?我不知道这个场景的名称。如果我没有正确调用它,请原谅。

我正在运行的查询也有一个自定义的 _score 函数,它为具有第三个指标的用户提供更高的分数(不包括因为它不相关)。可能是因为这个自定义评分功能吗?是否会因为第三个指标高于具有所需技能和水平的用户而给予“错误”用户更高的分数?

谢谢。

【问题讨论】:

  • 我没有完全理解你的问题,但看起来你想要'must'子句而不是'should'
  • 请记住,should 子句可以被认为是一个布尔值OR(而不是AND,这更多的是must 实现的) - 我认为默认情况下,任何满足这些条件之一(并且可以是任何一个)的文档都将匹配,尽管此要求可以由minimum_should_match 明确指定。 elasticsearch.org/guide/en/elasticsearch/reference/current/…
  • 大家好,感谢您的回复。它不能是must,因为should 条件只是用来添加分数。想象一个用户对某项技能的权重为 0,它仍然应该出现,但更低。
  • 谢谢@rchang,如果我能指定哪个至少应该匹配,那将是完美的,因为我至少需要匹配技能名称,其余的应该只是添加分数:分数越高,他们就越高
  • 我将再次解释我的场景:我可能会搜索很多技能,例如 Objective-C、Swift、Cocoa。所以我不能把技能名称作为“必须”,因为有些用户可能只有其中一个,但这应该没问题。然后我需要权重来自该技能而不是其他技能:我可能有 2 个技能 - Swift 和 Python。我在 Python 中很重要,在 Swift 中没有。这不应该给用户更高的分数,因为权重对应于“错误”的技能。

标签: elasticsearch


【解决方案1】:

找到我要找的东西:

http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/

必须将元素的类型从 object 更改为 nested 并执行 nested 搜索。链接中的示例正是我所经历的。

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2022-10-14
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多