Ich verwende Query String
mit Boost Fields
in . Es funktioniert gut, aber in einigen Szenarien bekomme ich nicht das erwartete Ergebnis.
Abfrage:Abfragezeichenfolge mit Boost-Feldern in der elastischen Suche
query
{
"from": 0,
"size": 10,
"explain": true,
"query": {
"function_score": {
"query": {
"query_string": {
"query": "account and data",
"fields": [
"title^5"
"authors^4",
"year^5",
"topic^6"
],
"default_operator": "and",
"analyze_wildcard": true
}
},
"score_mode": "sum",
"boost_mode": "sum",
"max_boost": 100
}
}
}
Beispieldaten:
{
"took": 50,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 12.833213,
"hits": [
{
"_id": "19850",
"_score": 12.833213,
"_source": {
"ID": "19850",
"Year": "2010",
"Title": "account and data :..."
}
},
{
"_id": "16896",
"_score": 11.867042,
"_source": {
"ID": "16896",
"Year": "2014",
"Title": "effectivness of data..."
}
},
{
"_id": "59862",
"_score": 9.706333,
"_source": {
"ID": "59862",
"Year": "2007",
"Title": "best system to..."
}
},
{
"_id": "18501",
"_score": 9.685843,
"_source": {
"ID": "18501",
"Year": "2010",
"Title": "management of..."
}
}
]
}
I unter Verwendung von Abfrage über Beispieldaten immer bin und das ist laut Erwartung. Aber jetzt, wenn ich weight
von year
auf 100 erhöhe dann erwarte ich 4. Ergebnis auf 3. Position und 3. Ergebnis auf 4. Position. Ich habe viele Dinge ausprobiert, aber ich weiß nicht, was ich falsch mache.
Muss ich alle Felder hinzufügen, die ich bei der Bestellung berücksichtigen möchte? –
Sie müssen die Felder hinzufügen, die Sie bei der Bestellung berücksichtigen möchten. aber das 'field_value_factor'' field' Attribut nimmt nur ein Feld. Wenn Sie eine Kombination aus zwei Feldern erstellen und benutzerdefinierte Logik hinzufügen möchten, sollten Sie statt dessen den 'script_score' verwenden, wie hier erwähnt https://www.elastic.co/guide/en/elasticsearch/guide/current/function-score -query.html –
Wenn dies Ihr Problem gelöst hat, denken Sie daran, die Antwort als akzeptiert zu markieren. –