tutorial puerto instalar ejemplos crear configurar solr term-document-matrix

puerto - solr tutorial



¿Cómo puedo decirle a Solr que devuelva los términos de búsqueda por documento? (2)

Tengo una pregunta sobre consultas en Solr. Cuando realizo una consulta con múltiples términos de búsqueda que están lógicamente vinculados por O (p. Ej. q=content:(foo OR bar OR foobar) ) que Solr devuelve una lista de documentos que coinciden con cualquiera de estos términos. Pero lo que Solr no devuelve es qué documentos fueron afectados por qué término (s). Entonces, en el ejemplo anterior, lo que quiero saber es qué documentos de mi lista de resultados contienen el término foo, etc. Dada esta información, podría crear una matriz de documento de términos.

Entonces mi pregunta es: ¿cómo puedo decirle a Solr que me dé esa información faltante? Estoy seguro de que está en algún lado, de lo contrario, la búsqueda en conjunto no funcionaría. Pero, ¿qué me estoy perdiendo? Gracias por tu ayuda.

PD: Como solución alternativa estoy realizando una sola consulta de Solr para todos los términos de búsqueda. Pero como se puede imaginar, es un desastre en materia de rendimiento, ya que la cantidad de términos de búsqueda puede exceder los 50 :(


Depende de tus requisitos, pero hasta donde sé, no hay un soporte específico para esto en Solr. Sin embargo, puedes hackearlo de otras maneras. No estoy seguro de lo que puede esperar para el rendimiento de estos, aunque ...

Use Highlightning

Si usa resaltado, puede analizar los fragmentos resaltados resaltados para las etiquetas de inicio / final del texto resaltado. Este será el término que coincida con algo en su consulta.

Usar información de debugQuery

Puede analizar la información devuelta por una consulta con debugQuery=true para determinar que un término se asoció con un resultado mirando termWeight (iirc). Esta podría ser una versión filtrada de su término original (si tiene stemming etc. activo para el campo).

Usar el colapso de campo

Al usar group.query, puede compilar listas de documentos que coincidan con cada término, en lugar de emitir varias solicitudes. También puede crear consultas que incluyan varios de los términos OR-ed juntos si necesita listas para "contiene cualquiera". Puede no ser efectivo para una gran cantidad de campos.

Analice el documento devuelto usted mismo

Obtenga el documento, luego extraiga los términos usted mismo. Requerirá un poco de coincidencia difusa, ya que también tendrá que lidiar con el procesamiento de texto en el lado de Solr.

Usar consultas de función

Puede obtener metavalores para cada documento con cada término de una FunctionQuery que busca las ocurrencias numéricas de un término en ese documento. Requerirá bastantes consultas de funciones para una gran cantidad de términos, pero puede ser rápido.

... ninguna opción es perfecta, pero podría funcionar para el problema en cuestión.


Mi comentario como respuesta:

Utilizo las consultas de función y parece que el rendimiento no es un problema :) Para aquellos que estén interesados: estoy usando la función de exists y agrego un pseudo-campo para cada término de búsqueda como así: fl=exists(query({!v=''content:(foo)''})),exists(query({!v=''content:(bar)''})) . De la respuesta analizo el término de búsqueda con un Regex.

Como dijo Paul anteriormente, puede alias pseudocampos para evitar el análisis de expresiones regulares, por ejemplo, fl=foo:exists(query({!v=''content:(foo)''}))