es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el resultado de búsqueda de ElasticsearchRestTemplate es diferente al resultado de consulta de Kibana?

Utilizo spring-data-elasticsearch NativeSearchQuery para construir mi consulta, pero el resultado es diferente de Kibana. Este es mi código:

@Autowired
private ElasticsearchRestTemplate restTemplate;

private Page<invitationes> doSearchByKw(String keyword, Pageable pageable) {

    HashMap<string, float=""> fields = new HashMap<>(2);
    fields.put("title", 1.0F);
    fields.put("content", 0.8F);

    FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(
            boolQuery().should(boolQuery().must(queryStringQuery(keyword).fields(fields).boost(10))));

    NativeSearchQuery build = new NativeSearchQueryBuilder().withQuery(functionScoreQueryBuilder)
            .withPageable(pageable).withSort(SortBuilders.scoreSort()).build();

    SearchHits<invitationes> searchHits = restTemplate.search(build, InvitationEs.class);

    SearchPage<invitationes> page = SearchHitSupport.searchPageFor(searchHits, pageable);
    return (Page<invitationes>) SearchHitSupport.unwrapSearchHits(page);
}

La consola imprime el cuerpo de la solicitud:

{
  "from": 0,
  "size": 10,
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "should": [
            {
              "bool": {
                "must": [
                  {
                    "query_string": {
                      "query": "坦度",
                      "fields": [
                        "content^0.8",
                        "title^1.0"
                      ],
                      "type": "best_fields",
                      "default_operator": "or",
                      "max_determinized_states": 10000,
                      "enable_position_increments": true,
                      "fuzziness": "AUTO",
                      "fuzzy_prefix_length": 0,
                      "fuzzy_max_expansions": 50,
                      "phrase_slop": 0,
                      "escape": false,
                      "auto_generate_synonyms_phrase_query": true,
                      "fuzzy_transpositions": true,
                      "boost": 10.0
                    }
                  }
                ]
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1.0
        }
      },
      "functions": [],
      "score_mode": "multiply",
      "max_boost": 3.4028235E38,
      "boost": 1.0
    }
  },
  "version": true,
  "explain": false,
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

Cuando copio este cuerpo de la solicitud a Kibana, el resultado es correcto, pero el orden de “searchHits” es incorrecto, ¿por qué cambia el “score”?

Aquí puede ver el “score” y el orden de “searchHits”: https://i.stack.imgur.com/gRmpC.png

Aquí puede ver el resultado de Kibana: https://i.stack.imgur.com/mq0mU.png</string,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible que las diferencias en la puntuación y ordenamiento se deban a diferencias en la forma en que Elasticsearch y Kibana manejan la puntuación de relevancia. Elasticsearch y Kibana usan algoritmos de puntuación de relevancia ligeramente diferentes, lo que puede resultar en diferentes puntajes y ordenamiento de los resultados de búsqueda, incluso cuando se utiliza la misma consulta.

    Una posible explicación para la diferencia en el ordenamiento es que Elasticsearch y Kibana pueden estar utilizando diferentes opciones de ordenamiento predeterminadas. En el ejemplo de código proporcionado, los resultados de búsqueda se ordenan por puntaje utilizando SortBuilders.scoreSort (). Es posible que Kibana esté utilizando una opción de ordenamiento predeterminada diferente que esté afectando el orden de los resultados de búsqueda.

    Otra posible explicación es que Elasticsearch y Kibana están utilizando diferentes pesos de campo. En el ejemplo de código proporcionado, el campo title tiene un peso de 1.0, mientras que el campo content tiene un peso de 0.8. Es posible que Kibana esté utilizando diferentes pesos de campos que estén afectando la puntuación de los resultados de búsqueda.

    En general, es importante tener en cuenta que diferentes plataformas de búsqueda pueden manejar la puntuación de relevancia y el ordenamiento de manera diferente, y que la misma consulta no siempre producirá resultados idénticos en diferentes plataformas.

Comments are closed.