Tenho a seguinte estrutura de dados de documento no Elasticsearch:
{
"topics": [ "a", "b", "c", "d" ]
}
Eu tenho uma lista de seleção onde o usuário pode filtrar quais tópicos mostrar. Quando o usuário estiver OK com seu filtro, eles serão apresentados a todos os documentos que possuem qualquer um dos tópicos selecionados na matriz "tópicos"
Eu tentei a consulta
{
"query": {
"terms": {
"topics": ["a", "b"]
}
}
}
mas isso não retorna nenhum resultado.
Para expandir a consulta. Por exemplo, a lista ["a", "b"]
corresponderia ao primeiro, segundo e terceiro objetos na matriz abaixo.
Existe uma boa maneira de fazer isso no Elasticsearch? Obviamente, eu poderia fazer várias consultas de "correspondência", mas isso é prolixo, pois tenho centenas de tópicos
Editar: meu mapeamento
{
"fb-cambodia-post": {
"mappings": {
"scrapedpost": {
"properties": {
"topics": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
}
}
}
}
}
Como @Filip cordas mencionou, você pode usar topic.keyword
like.
{
"query": {
"terms": {
"topics.not_analyzed": [
"A" , "B"
]
}
}
}
Isso fará a case sensitive
pesquisa. Ele procurará a correspondência exata. Caso queira case-insensitive
pesquisar, você pode usar query_string
como:
{
"query": {
"query_string": {
"default_field": "topics",
"query": "A OR B"
}
}
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras