2

用語フィルターに一致するドキュメントにブーストを追加しようとしています。基本はBoolean/MatchAllクエリです。しかし、Elasticsearch クエリのブーストは効果がありません。すべての結果スコアは 1 に設定されます。

curl -XPOST localhost:9200/wiki_content/_search?pretty -d '
{
  "_source": [
    "title"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "title.keyword": {
                    "value": "Main Page",
                    "boost": 9
                  }
                }
              },
              {
                "term": {
                  "title.keyword": {
                    "value": "Top Page",
                    "boost": 999
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
'

ただし、フィルタリングされたクエリを使用すると、ブーストが機能します。しかし、システムの制限により、フィルターされたクエリを使用できません。元のクエリでブースティングを機能させる方法はありますか?

4

1 に答える 1

2

クエリのフィルター部分では、ブーストは効果がありません。フィルターの唯一の仕事は、ええと、特定の値に一致するクエリをフィルターすることです。代わりに試してください:

curl -XPOST localhost:9200/wiki_content/_search?pretty -d '
{
  "_source": [
    "title"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "should": [
        {
          "term": {
            "title.keyword": {
              "value": "Main Page",
              "boost": 9
            }
          }
        },
        {
          "term": {
            "title.keyword": {
              "value": "Top Page",
              "boost": 999
            }
          }
        }
      ]
    }
  }
}
'

...トップレベルの bool クエリの should-clause に 2 つの term-queries を直接移動します。

于 2017-01-31T15:25:31.410 に答える