如何提升个人文件

时间:2017-06-26 11:35:26

标签: elasticsearch elasticsearch-2.0

我有一个非常复杂的查询,现在我想提升一些符合某些标准的文档。我有以下简化的文档结构,我尝试根据id,流派,标记给一些文档提升。

{
  "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”的文档。

2 个答案:

答案 0 :(得分:2)

我认为你需要在查询时间内进行动态提升。

第一个匹配id标题与boost,第二个匹配'性别' 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):

best_fields

  

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

<强> most_fields

  

查找与任何字段匹配的文档并组合_score   每个领域。见most_fields。

<强> cross_fields

  

使用相同的分析器处理字段,就好像它们是一个大的   领域。在任何字段中查找每个单词。见cross_fields。

<强>短语

  

在每个字段上运行match_phrase查询并组合来自的_score   每个领域。请参阅短语和phrase_prefix。

<强> phrase_prefix

  

在每个字段上运行match_phrase_prefix查询并组合_score   来自每个领域。请参阅短语和phrase_prefix。

更多信息:ES 5.4 ElasticSearch reference

答案 1 :(得分:0)

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

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
    }
  }
}