Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

doutorevil

Ordem usando nested type - Elasticsearch

Recommended Posts

Eu estou com uma pesquisa em ElasticSearch que verifica o nível do índice e o sub nível de salões e seus serviços, até este ponto é ok, mas o que eu recebo no meu sub nível é uma grande quantidade de serviços inúteis e fora de ordem . Quanto à ordem que deve ser de acordo com o digitado pelo usuário, da mesma forma que o nome dos salões.
este é o meu mapeamento:
{
  "saloes": {
    "properties": {
      "id_salao": {
        "type": "integer"
      },
      "salao": {
        "type": "string",
        "analyzer": "brazilian"
      },
      "locations": {
        "type": "geo_point"
      },
      "servicos": {
        "type": "nested",
        "properties": {
          "id_servico": {
            "type": "integer",
            "index": "not_analyzed"
          },
          "servico": {
            "type": "string",
            "analyzer": "brazilian"
          },
          "servico_es": {
            "type": "string",
            "index": "not_analyzed"
          },
          "descricao_servico": {
            "type": "string",
            "analyzer": "brazilian"
          },
          "categoria": {
            "type": "string",
            "analyzer": "brazilian"
          }
        }
      }
    }
  }
}
E esta é a minha consulta, nota que tentei usar "nested_filter" para tentar ordenar os serviços retornados em relevância para "Maquiagem", mas nada acontece com a ordem de serviços, no máximo os salões sofrem algum efeito:
{
  "from": 0,
  "size": 20,
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "constant_score": {
                "filter": {
                  "and": [
                    {
                      "query": {
                        "multi_match": {
                          "analyzer": "brazilian",
                          "query": "Maquiagem",
                          "fields": [
                            "salao",
                            "descricao"
                          ]
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "constant_score": {
                "filter": {
                  "and": [
                    {
                      "query": {
                        "nested": {
                          "path": "servicos",
                          "query": {
                            "multi_match": {
                              "analyzer": "brazilian",
                              "query": "Maquiagem",
                              "fields": [
                                "servicos.servico",
                                "servicos.descricao_servico"
                              ]
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      },
      "filter": {
        "geo_distance": {
          "distance": "50km",
          "saloes.locations": "-23.5505199,-46.63330939999997"
        }
      }
    }
  },
  "sort": {
    "estrelas": "desc",
    "servicos.servico": {
      "order": "desc",
      "nested_path": "servicos",
      "nested_filter": {
        "term": {
          "servicos.servico_es": "Maquiagem"
        }
      }
    }
  }
}
Eu preciso criar o seguinte padrão:
- Maior relevância salão:
- - serviço de maior relevância.
- - outros serviços
- - outros serviços
- Maior relevância salão:
- - serviço de maior relevância.
- - outros serviços
- - outros serviços
meu problema é aqui:
"sort": {
        "estrelas": "desc",
        "servicos.servico": {
          "order": "desc",
          "nested_path": "servicos",
          "nested_filter": {
            "term": {
              "servicos.servico_es": "Maquiagem"
            }
          }
        }
      }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.