Me gustaría tener, además de la búsqueda de términos estándar con similitud tf-idf sobre el campo de contenido de texto, la puntuación basada en la "similitud" de los campos numéricos. Esta similitud dependerá de la distancia entre el valor en la consulta y en el documento (por ejemplo, gaussian con m = [entrada del usuario], s = 0.5)Puntuación personalizada de Lucene para los campos numéricos
I.e. digamos documentos representan a las personas, y la persona documento tiene dos campos:
- descripción (texto completo)
- edad (numérico).
Quiero encontrar documentos como
Descripción: (xyz) Edad: 30
pero la edad para ser no el filtro, sino más bien parte de puntuación (por persona en edad de 30 multiplicador será 1.0, para una persona de 25 años, 0.8, etc.)
¿Se puede lograr esto de manera sensata?
EDIT: Finalmente descubrí que esto se puede hacer al ajustar ValueSourceQuery y TermQuery con CustomScoreQuery. Vea mi solución a continuación.
EDIT 2: Con las versiones de Lucene que cambian rápidamente, solo quiero añadir que se probó en Lucene 3.0 (Java).
Esto se puede generalizar a número arbitrario de 'ValueSourceQuery'-s como CustomScoreQuery tiene varargs constructor. El método de puntaje para sobrescribir es entonces 'float public customScore (int doc, float subQueryScore, float [] valSrcScore)'. –