Estoy trabajando en una consulta de solr similar a la siguiente:
((myField:superneat AND myOtherField:somethingElse) OR NOT myField:superneat)
Al ejecutar esto, no se devuelven resultados. El uso de criterios a ambos lados de OR NOT devuelve los resultados que esperaba, simplemente no funcionan bien juntos. En el caso de que myField coincida con superneat , tengo la intención de asegurarme también de que myOtherField esté configurado en somethingElse , pero si myField no es superneat , inclúyalo en los resultados.
¿Alguien puede explicar por qué solr no devuelve resultados para este tipo de consulta? ¿Debería reestructurarse la consulta de alguna manera, o hay una forma diferente en la que se puede usar solr para lograr el resultado deseado?
-myField:superneat OR myOtherField:somethingElse
también sería lo mismo y es un poco más simple.fuente
Solr actualmente busca una consulta "puramente negativa" e inserta
*:*
(que coincide con todos los documentos) para que funcione correctamente.-foo
es transformado por solr en(*:* -foo)
La gran advertencia es que Solr solo verifica si la consulta de nivel superior es una consulta negativa pura. Esto significa que una consulta como
bar OR (-foo)
no se cambia ya que la consulta negativa pura está en una subcláusula de la consulta de nivel superior. Necesita transformar esta consulta usted mismo enbar OR (*:* -foo)
Puede consultar la explicación de la consulta solr para verificar la transformación de la consulta:
se transforma en
fuente
Al reunir comentarios de un par de respuestas diferentes aquí, en los documentos de Solr y en la otra pregunta SO, encontré que la siguiente sintaxis produce el resultado correcto para mi caso de uso
(my_field = my_value o my_field es nulo):
Esto funciona para solr 4.1.0. Esto es ligeramente diferente al caso de uso en el OP; pero pensé que otros lo encontrarían útil.
fuente
Puede encontrar el seguimiento del grupo de usuarios solr en: lista de correo de usuarios solr
La idea predominante es que el operador NOT solo se puede usar para eliminar resultados de una consulta, no solo para excluir cosas de todo el conjunto de datos. Resulta que me gusta la sintaxis que sugirió mausch, ¡gracias!
fuente
Solo para agregar otro caso inesperado, aquí está la consulta que no devolvía los resultados esperados:
field_b
en mi caso, es algo en lo que realizo facetas y necesitaba apuntar al término de consulta "foo" solo en ese tipo (barra)Tuve que insertar otro
*:*
después de la condición o para que esto funcione, así:editar: esto está en solr 6.6.3
fuente
simple do id :( "12345") O id :( "7890") .... y así sucesivamente
fuente