【问题标题】:How to boost individual documents如何提升单个文档
【发布时间】:2017-07-06 17:33:36
【问题描述】:

我有一个非常复杂的查询,现在我想提升一些满足某些条件的文档。我有以下简化的文档结构,我尝试根据 id、genre、tag 来提升一些文档。

{
  "id": 123,
  "genres": ["ACTION", "DRAMA"],
  "tags": ["For kids", "Romantic", "Nature"]
}

我想做的是例如

id: 123 boost: 5
genres: ACTION boost: 3
tags: Romantic boost: 0.2

并提升我的查询中包含的所有文档并符合条件,但我不想将它们过滤掉。所以我猜查询子句提升没有任何帮助。

编辑:为了更容易理解我想要实现的目标(不确定是否可以使用 elasticsearch,否也是一个有效的答案)。

我想使用查询进行搜索并获得结果集。在这个集合中,我想提升一些文件。但我不想扩大结果集或过滤它。提升应该独立于查询。

例如,我搜索特定标签并希望提升结果集中所有类别为“ACTION”的文档。但我不希望结果集中所有具有“ACTION”类别的文档,也不想只希望具有特定标签和“ACTION”类别的文档。

【问题讨论】:

  • 如果是你来回答,你能接受吗?谢谢。
  • 不是我。 :)
  • 我明白了。我已尝试根据您的编辑更新答案,但我并不完全理解。

标签: elasticsearch elasticsearch-2.0


【解决方案1】:

我认为您需要在查询期间进行动态提升。

第一个匹配带有 boost 的 id 标题,第二个匹配 'genders' ACTION。

    {
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": {
              "query": "id",
              "boost": 5
            }
          }
        },
        {
          "match": { 
            "content": "Action"
          }
        }
      ]
    }
  }
}

如果您想根据您的查询匹配multi_match

{
  "multi_match" : {
    "query": "some query terms here", 
    "fields": [ "id^5", "genders^3", "tags^0.2" ] 
  }
}

注意:^5 表示标题的提升。

编辑: 也许您从 ES 参考指南中要求不同类型的 multi_match 查询(至少对于 ES 5.x):

最佳字段

(默认)查找与任何字段匹配的文档,但使用 最佳领域的 _score。查看 best_fields。

most_fields

查找与任何字段匹配的文档并结合来自的 _score 每个字段。查看 most_fields。

cross_fields

使用相同的分析器处理字段,就好像它们是一个大的一样 场地。查找任何字段中的每个单词。请参阅 cross_fields。

短语

对每个字段运行 match_phrase 查询并结合来自的 _score 每个字段。请参阅短语和短语前缀。

短语前缀

对每个字段运行 match_phrase_prefix 查询并结合 _score 从每个领域。请参阅短语和短语前缀。

更多信息:ES 5.4 ElasticSearch reference

【讨论】:

  • 但这也会扩大我的结果集。例如,我想搜索一些标签并提升所有具有此标签和类别“ACTION”的文档,但我不想要所有具有“ACTION”类别的文档,我不想要只有具有标签和类别“ACTION”的文档.在这种情况下,既不应该也不必须有帮助。
  • @Peter 答案分为两部分。你真的试过multi_match吗?这提升了各个领域 - 您可以在参考资料中阅读更多信息 - elastic.co/guide/en/elasticsearch/reference/current/…
【解决方案2】:

我找到了一个解决方案,而且非常简单。我使用增强查询。我现在只是嵌套不同的提升标准,我的原始查询现在是基本查询。

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-boosting-query.html

例如:

{
  "query": {
    "boosting": {
      "positive": {
        "boosting": {
          "positive": {
            "match": {
              "director": "Spielberg"
            }
          },
          "negative": {
            "term": {
              "genres": "DRAMA"
            }
          },
          "negative_boost": 1.3
        }
      },
      "negative": {
        "term": {
          "tags": "Romantic"
        }
      },
      "negative_boost": 1.2
    }
  }
}

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2012-12-27
    • 1970-01-01
    • 2012-02-22
    • 2021-11-02
    • 2011-06-11
    相关资源
    最近更新 更多