2017-02-01 3 views
0

Ich benutze elasticsearch mit einer Datenbank von Benutzern. Jeder Benutzer hat mehrere Jobs und jeder Job hat eine Karriere-ID. Ich verwende die folgende Abfrage-Benutzer mit bestimmten Jobs zu finden:Wie man basierend auf Frequenz in elasticsearch punkten

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

jedoch diese Abfrage zeigt alle Resultate eine Punktzahl von 1 gibt sie in mindestens einer ihrer Positionen, die Karriere.

Ich brauche die Punktzahl, um die Anzahl der Positionen, die der Benutzer hat, zu reflektieren.

Gibt es eine Möglichkeit, dies mit elasticsearch zu tun?

Antwort

0

Sie können erweiterte Scoring-Module von elasticsearch verwenden, um auf Scoring-Attribute auf Indexebene zuzugreifen, um die Dokumente basierend auf der Termhäufigkeit zu bewerten.

Official documentation.

Sie können es in der Abfrage function score Skript Partitur verwenden in Elasticsearch basierend auf der Frequenz zum Spiel

Für ES 2.4.1 und Standard-Skriptsprache 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()" 
     }} 
    ] 
    }} 
} 

Im Anschluss an die Antwort für die obige Abfrage .

{ 
    "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 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

Ich hoffe, dies hilft.

Verwandte Themen