0

私は次のようなクエリを送信しています:(クエリ{すべて}を使用)

{
  "query": {
    "custom_filters_score": {
      "query": {
        "match_all": {}
      },
      "filters": [
        {
          "filter": {
            "range": {
              "last_contact_at": {
                "gte": "2013-06-21T12:02:25Z"
              }
            }
          },
          "boost": 1
        },
        {
          "filter": {
            "range": {
              "available_at": {
                "gte": "2013-06-28"
              }
            }
          },
          "boost": 2
        },
        {
          "filter": {
            "term": {
              "company_type": "intern"
            }
          },
          "boost": 10
        },
        {
          "filter": {
            "range": {
              "friends_count": {
                "from": 1
              }
            }
          },
          "boost": 3
        },
        {
          "filter": {
            "term": {
              "blacklisted": true
            }
          },
          "boost": -100
        },
        {
          "filter": {
            "term": {
              "focuses": "ruby php"
            }
          },
          "boost": 5
        },
        {
          "filter": {
            "term": {
              "tags": "ruby php"
            }
          },
          "boost": 4
        }
      ],
      "score_mode": "total"
    }
  }
}

max_score: 16 で次の応答が得られます。これはブースト ポイントの合計です。

応答

{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 10,
      "max_score": 16,
...

そして、同じ custom_filters_score を送信しているが、クエリ { string term } を使用している場合

{
  "query": {
    "custom_filters_score": {
      "query": {
        "query_string": {
          "query": "ruby php"
        }
      },
      "filters": [
        {
          "filter": {
            "range": {
              "last_contact_at": {
                "gte": "2013-06-21T12:03:46Z"
              }
            }
          },
          "boost": 1
        },
        {
          "filter": {
            "range": {
              "available_at": {
                "gte": "2013-06-28"
              }
            }
          },
          "boost": 2
        },
        {
          "filter": {
            "term": {
              "company_type": "intern"
            }
          },
          "boost": 10
        },
        {
          "filter": {
            "range": {
              "friends_count": {
                "from": 1
              }
            }
          },
          "boost": 3
        },
        {
          "filter": {
            "term": {
              "blacklisted": true
            }
          },
          "boost": -100
        },
        {
          "filter": {
            "term": {
              "focuses": "ruby php"
            }
          },
          "boost": 5
        },
        {
          "filter": {
            "term": {
              "tags": "ruby php"
            }
          },
          "boost": 4
        }
      ],
      "score_mode": "total"
    }
  }
}

max_score: 8.990471 で次の応答を取得します。

応答

{
   "took": 4,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 6,
      "max_score": 8.990471,
...

ブーストポイントの合計として達成max_scoreし、 term を含む結果のみを表示するにはどうすればよいですか?

検索サービス: https://gist.github.com/8f13ce2be820d9ef1959

4

1 に答える 1

0

es docsからは次のようになります。

  1. クエリが実行され、一連のヒットが生成されます
  2. 一連のヒットに対してフィルターが実行され、スコアが付けられます。

match_all(クエリからの) スコアが 16 のドキュメントは、2 回目の検索では と一致しないようです。これが、が小さい"query_string":{"query":"ruby php"}理由です。max_score

また、16はすべてのブーストポイントの合計だとおっしゃっていますが、フィルターからのスコアを合計すると25、またはブラックリストを含めると-75になります...

于 2013-06-30T06:13:50.453 に答える