2010-12-07 8 views
6

Estoy buscando "documentos del producto". En otras palabras, mis documentos solr son registros de productos. Quiero decir los mejores 50 productos coincidentes para una consulta. Entonces, quiero poder ordenar los 50 mejores documentos de puntaje por nombre o precio. No veo mucho sobre cómo hacer esto, ya que ordenar por puntaje, luego por nombre o precio no ayudará realmente, ya que las puntuaciones son flotantes.cómo puedo limitar por puntaje antes de ordenar en una consulta solr

No me importaría si pudiera hacer algo como asignar los puntajes a rangos (como un puntaje de 8.0-8.99 iría en el puntaje de 8 cubos), luego ordenar por rango, luego por nombres, pero ya que hay básicamente no hay normalización para anotar, esto aún haría las cosas un poco más difíciles.

Tl; dr ¿Cómo se excluyen los documentos de baja puntuación del conjunto de resultados del solr antes de la clasificación?

Respuesta

3

Puede utilizar frange para lograr esto, siempre y cuando no se desea ordenar en la puntuación (en cuyo caso te supongo podría hacer el filtrado en el lado del cliente).

Su consulta sería algo a lo largo de las líneas de:

q={!frange l=5}query($qq)&qq=[awesome product]&sort=price asc 

Ajuste el l argumento en la q-frange-parámetro al límite inferior que desea filtrar puntuación en, y reemplazar el parámetro q con su consulta del usuario

+0

gracias, ya que puedo obtener una franquicia razonable desde la primera vez que se muestran los resultados ordenados por puntaje solo, ¡esto funciona genial! – Zak

0

No creo que usted puede simplemente

excluir los documentos de puntuación baja de los Solr conjunto de resultados antes de la clasificación

debido a que la puntuación de relevancia sólo tiene sentido para una combinación dada de consulta de búsqueda y la lista de documentos resultante. Es decir. los puntajes solo son significativos dentro de una búsqueda dada y no puede establecer un umbral para todas las búsquedas.

Si usaba Java (o PHP) podría obtener los 50 mejores documentos y luego volver a ordenar esta lista en su lenguaje de programación, pero no creo que pueda hacerlo solo con SOLR.

De todos modos, recomendaría que no siga esta ruta de volver a ordenar los resultados de SOLR, ya que simplemente confundirá al usuario. La gente espera que los resultados de búsqueda sean como Google (y la mayoría de los otros motores de búsqueda), donde los resultados vuelven en alguna forma del ranking de TFIDF.

Habiendo dicho eso, puede usar algunos otros criterios para separar documentos con los mismos puntajes de relevancia agregando un factor index-time boost basado en una escala de rango de precios.

Le sugiero que use SOLR para sus puntos fuertes y facetas de uso. Proporcione una faceta de rango de precio a la izquierda (como Ebay, Amazon, et al.) Y/o una categoría de categoría de producto, etc. También proporcione un widget "ordenar" para permitir que los resultados se clasifiquen por nombre de producto, si el usuario desea eso.

[EDIT] Esta pregunta también podría ser útil:

Digg-like search result ranking with Lucene/Solr?

0

Como observó Karl Johansson, podría hacer el filtrado en el lado del cliente: cargue las primeras 50 filas de la respuesta (ordenadas por puntuación desc) y luego manipúlelas en JS, por ejemplo.

El jQuery DataTables plugin funciona fantásticamente para ese tipo de cosas: clasificación, clasificación en múltiples columnas, filtrado dinámico, etc. - y con solo 50 filas sería muy rápido también, para que los usuarios puedan "jugar" con la clasificación y filtrando hasta que encuentren lo que quieren.

Cuestiones relacionadas