minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
No Elasticsearch, o mecanismo de pontuação padrão (como o algoritmo BM25) pode fornecer uma boa classificação dos resultados da pesquisa na maioria dos casos. No entanto, em alguns cenários específicos, pode ser necessário realizar uma classificação mais refinada dos resultados da pesquisa com base nas necessidades do negócio. No momento, o Elasticsearch fornece funções de pontuação personalizada (Consulta de pontuação de função) e pontuação de script (Pontuação de script) para atender a essas necessidades complexas. Este artigo detalha como personalizar a pontuação e a pontuação de script no Elasticsearch.
A pontuação personalizada nos permite modificar a pontuação padrão de cada documento com base em um conjunto de funções predefinidas. Essas funções podem calcular novas classificações com base nos valores dos campos do documento, nos critérios de consulta ou em outros fatores. Por fim, o Elasticsearch combinará a pontuação original com a pontuação personalizada para determinar a classificação dos resultados da pesquisa.
O Elasticsearch fornece uma variedade de funções integradas para pontuação personalizada, incluindo, mas não se limitando a:
Suponha que temos um site de comércio eletrônico e os usuários desejam considerar o preço e as classificações do produto ao pesquisar os produtos.podemos usarfunction_score
Consulta para atingir este requisito:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"field_value_factor": {
"field": "price",
"modifier": "reciprocal",
"params": {
"scale": 100
}
}
},
{
"field_value_factor": {
"field": "rating",
"missing": 1.0
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
}
Neste exemplo usamosfield_value_factor
A função calcula uma classificação personalizada com base no preço e na classificação do item. Os preços usam decaimento recíproco (reciprocal
), para que o produto com preço menor tenha pontuação maior; a pontuação utiliza o valor do campo diretamente. Finalmente, adicionamos as classificações de ambas as funções e substituímos as classificações originais.
A pontuação de script nos permite usar uma linguagem de script personalizada (como Painless) para calcular a pontuação de um documento. Essa abordagem oferece maior flexibilidade e pode calcular pontuações com base em praticamente qualquer lógica.
Suponha que queiramos ajustar a classificação com base na quantidade de estoque do produto. Produtos com menos estoque terão classificações mais altas.podemos usarscript_score
função para atingir este requisito:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
"lang": "painless"
}
}
}
],
"score_mode": "multiply",
"boost_mode": "replace"
}
}
}
Neste exemplo, usamos a linguagem de script Painless para calcular a classificação. O script determina a quantidade de estoque do produto (doc['stock'].value
) calcula uma pontuação. Quanto maior a quantidade de estoque, menor a pontuação; quanto menor a quantidade de estoque, maior a pontuação. Em seguida, multiplicamos essa pontuação pela classificação original para ajustar a classificação final dos resultados da pesquisa.
A pontuação personalizada e a pontuação de script são recursos poderosos fornecidos pelo Elasticsearch, que nos permitem refinar os resultados da pesquisa com base nas necessidades do negócio. Ao usar essas funções de forma racional, podemos melhorar a experiência do usuário e atender às diversas necessidades dos usuários. No entanto, deve-se notar que a pontuação personalizada e a pontuação de script podem aumentar a complexidade da consulta e o custo computacional, portanto, os prós e os contras precisam ser avaliados em aplicações práticas e usados com cautela.