簡體   English   中英

如何在Elasticsearch中基於頻率進行評分

[英]How to score based on frequency in elasticsearch

我正在將Elasticsearch與用戶數據庫一起使用。 每個用戶有多個職位,每個職位都有職業編號。 我正在使用以下查詢來查找具有特定職位的用戶:

"explain": true, 
"query": {
    "bool": {
        "should": [
            {
                "bool": {
                    "must": [
                        {
                            "term": {
                                  "positions.career.id": {
                                  "value": 31
                                }
                            }
                        }
                    ]
                }
            }
        ],
        "minimum_number_should_match": 1
    }
}

但是,此查詢為所有結果賦予1分,表示他們至少在一個職位上擁有該職業。

我需要分數來反映用戶的職位數量。

使用Elasticsearch有什么辦法做到這一點?

您可以使用elasticsearch的高級評分模塊來訪問索引級別的評分屬性,以根據詞頻對文檔進行評分。

官方文件

您可以在功能分數腳本分數查詢中使用它,以根據Elasticsearch中的頻率進行分數

對於ES 2.4.1和默認腳本語言groovy

POST index_name1/test_type
{
  "title" : "harley harley harley",
  "nested_one" : [{
    "some_id" : 78
  },
  {
    "some_id" : 80
  },{
    "some_id" : 100
  }],
  "nested_two" : [{
    "some_id" : 79
  },
  {
    "some_id" : 80
  },{
    "some_id" : 101
  }]
}

POST index_name1/test_type
    {
      "title" : "harley harley",
      "nested_one" : [{
        "some_id" : 78
      },
      {
        "some_id" : 80
      },{
        "some_id" : 100
      }],
      "nested_two" : [{
        "some_id" : 79
      },
      {
        "some_id" : 80
      },{
        "some_id" : 101
      }]
    }

POST index_name1/_search
{
  "query": {"function_score": {
    "query": {"match_all": {}},
    "functions": [
      {"script_score": {

        "script": "_index['title']['harley'].tf()"
      }}
    ]
  }}
}

以下是上述查詢的響應。

{
  "took": 173,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 3,
    "hits": [
      {
        "_index": "index_name1",
        "_type": "test_type",
        "_id": "AVn9aDOUKkYhaW9Iz5wL",
        "_score": 3,
        "_source": {
          "title": "harley harley harley",
          "nested_one": [
            {
              "some_id": 78
            },
            {
              "some_id": 80
            },
            {
              "some_id": 100
            }
          ],
          "nested_two": [
            {
              "some_id": 79
            },
            {
              "some_id": 80
            },
            {
              "some_id": 101
            }
          ]
        }
      },
      {
        "_index": "index_name1",
        "_type": "test_type",
        "_id": "AVn9aBQGKkYhaW9Iz5wJ",
        "_score": 2,
        "_source": {
          "title": "harley harley",
          "nested_one": [
            {
              "some_id": 78
            },
            {
              "some_id": 80
            },
            {
              "some_id": 100
            }
          ],
          "nested_two": [
            {
              "some_id": 79
            },
            {
              "some_id": 80
            },
            {
              "some_id": 101
            }
          ]
        }
      },
      {
        "_index": "index_name1",
        "_type": "test_type",
        "_id": "AVn9aBhlKkYhaW9Iz5wK",
        "_score": 2,
        "_source": {
          "title": "harley harley",
          "nested_one": [
            {
              "some_id": 78
            },
            {
              "some_id": 80
            },
            {
              "some_id": 100
            }
          ],
          "nested_two": [
            {
              "some_id": 79
            },
            {
              "some_id": 80
            },
            {
              "some_id": 101
            }
          ]
        }
      }
    ]
  }
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM