como procurar marcas na pesquisa elastica
"query": {
"bool": {
"should": [
{
"match": {
"keyword": {
"query": "abstract, background"
}
}
}
]
}
}
só funciona para a combinar palavras-chave únicas. Eu quero corresponder para várias palavras-chave e também classificá-los pela sua relevância. Obrigado.
-----editar------
Estes são os meus mapeamentos. O campo do título funciona bem. A categoria é apenas usada para agregações e a palavra-chave é o campo principal para corresponder.PUT /freevects
{
"mappings": {
"photos": {
"properties": {
"title": {
"type": "text",
"boost": 1.9,
"analyzer": "standard"
},
"keyword": {
"type": "keyword",
"boost": 1.4
},
"category": {
"type": "keyword",
"index": false
},
"quality": {
"type": "short",
"index": false,
"boost": 1.1
},
"downloads": {
"type": "integer",
"index": false,
"boost": 1.1
},
"likes": {
"type": "integer",
"index": false,
"boost": 1
},
"filename": {
"type": "keyword",
"index": false
},
"type": {
"type": "keyword",
"index": false
},
"free": {
"type": "short",
"index": false
},
"created": {
"type": "date",
"index": false
}
}
}
}
}
1 answers
O porblem é com o mapeamento do campo keyword
. É de type: keyword
no seu mapeamento.
Isto não indica a sua consulta de pesquisa e os valores indexados. Então, quando você busca, os termos são pesquisados como está.
Exemplo: procurar por: "abstract, background" como você fez em sua pergunta, na verdade irá procurar apenas ocorrem exatas de "abstract, background" no campo Palavra-chave.
Mudar o mapeamento do campo palavras-chave para:
"keyword": {
"type": "text",
"boost": 1.4
}
E indexar os seus valores como:
{
"keyword": ["abstract", "background"]
}
Seria o meu sugestao.
Referência: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-keyword-analyzer.html
Pesquisa por marcas de pesquisa:
{
"query": {
"bool": {
"should": [
{
"match": {
"keyword": "abstract"
}
},
{
"match": {
"keyword": "background"
}
}
]
}
}
}
Editar: mudou o tipo de texto para texto porque está desactualizado na versão mais recente do elástico, como indicado pelo OP.