Indagamos en todo el mundo on line para traerte la solución a tu duda, si continúas con preguntas deja un comentario y te contestamos con gusto, porque estamos para ayudarte.
Solución:
Si el documento “debe” ser devuelto solo si el id es 1 o 2, eso suena a otro should
cláusula. Si entiendo su pregunta correctamente, quiere documentos con id 1 O id 2. Además, si el color es amarillo, asígnele una puntuación más alta.
Aquí hay una forma en que puede lograr lo que está buscando:
"query":
"bool":
"should":
"match":
"fruit.color": "yellow"
,
"must":
"bool":
"should": [
"match":
"fruit.id": "1"
,
"match":
"fruit.id": "2"
]
Aquí pongo los dos match
consultas en el should
cláusula de un separado bool consulta. Esto logra el comportamiento OR que está buscando.
Eche otro vistazo a la documentación de Bool Query y tome nota de los matices de should
. Se comporta de forma diferente por defecto dependiendo de si hay un hermano o no must
cláusula y si la bool la consulta se está ejecutando en contexto de filtro.
Otro key La opción que es ajustable y puede ayudarlo a lograr los resultados esperados es el minimum_should_match
parámetro. Echa un vistazo a esta página de documentación.
En lugar de una consulta de coincidencia, simplemente puede probar el terms
consulta por OR
ing entre múltiples términos.
Las consultas de coincidencia se utilizan generalmente para analyzed
los campos. Para una coincidencia exacta, debe usar term queries
"from": 0,
"size": 20,
"query":
"bool":
"should": [
"match": "fruit.color": "yellow"
],
"must" : [
"terms": "fruit.id": ["1","2"]
]
término o consulta de términos es la manera perfecta de obtener el text
o id
utilizando el resultado de la consulta de coincidencia en la búsqueda dentro de la identificación o el texto
Ej: id = ‘4’ id = ’44’
La búsqueda usando la consulta de coincidencia con id = 4 devuelve 4 y 44 ya que coincide con 4 en ambos. Aquí es donde entra en juego la consulta de términos. la misma búsqueda usando la consulta de términos devolverá solo 4.
Entonces lo aceptado es absolutamente incorrecto. Usa la respuesta de @Rahul. Solo una cosa más que debe hacer, en lugar de texto, debe analizar el campo como una palabra clave
Ejemplo para indexar un campo como texto y palabra clave (el mapeo es para nivel plano para anidado, cámbielo en consecuencia).
"index_patterns": [ "test" ],
"mappings":
"kb_mapping_doc":
"_source":
"enabled": true
,
"properties":
"id":
"type": "text",
"fields":
"keyword":
"type": "keyword"
usar la respuesta de @Rahul no funcionó porque es posible que lo analicen como texto.
- id – acceder a un campo de texto
- id.keyword – accede a un campo de palabra clave
podría ser
"from": 0,
"size": 20,
"query":
"bool":
"should": [
"match":
"color": "yellow"
],
"must": [
"terms":
"id.keyword": ["1", "2"]
]
Por lo tanto, diría que la respuesta aceptada arrojará resultados falsos. Utilice la respuesta de @Rahul con el mapeo correspondiente.