2012-02-14 10 views
7

En una instalación SOLR, cuando busco un campo con un término de búsqueda de varias palabras, quiero que SOLR devuelva documentos que tienen todos los términos en la búsqueda, pero no necesita estar en el orden exactoSolr - Resultados que contienen todos los términos, en cualquier orden

Por ejemplo, si busco el título de Brown Chicken Brown Cow, quiero encontrar todos los documentos que contengan todos los términos Brown, Chicken y Cow, independientemente del orden en el campo del título. Entonces, por ejemplo, el título "El pollo y la vaca tienen caca marrón" debe coincidir con la consulta. AFAIK, así es como Google también ejecuta las búsquedas.

he experimentado con los siguientes formatos de consulta:

1. Title:Brown AND Title:Chicken 
2. Title:Brown AND Chicken 
3. Title:Brown+Chicken 

Estoy muy confundido por los resultados. En algunos casos, las dos primeras consultas devuelven el mismo conjunto exacto de resultados. En otros casos, la primera versión arrojará muchos resultados y la segunda versión no devolverá ninguno. La tercera versión parece satisfacer mis necesidades, pero estoy confundido por el diferente significado de las consultas.

Todas mis pruebas se han ejecutado en un campo de tipo text_es.

<field name="Title" multiValued="false" type="text_en" indexed="true" stored="true"/> 

Entonces, ¿cuál es la mejor SOLR consulta/configuración para este tipo de búsqueda? Además, ¿existe una manera fácil de hacer que Solr.NET tome un término de búsqueda introducido por el usuario y lo convierta a este tipo de formato?

Además, ¿otorgará SOLR de forma predeterminada a los documentos que coinciden con el orden de la frase de búsqueda un puntaje de relevancia más alto? Si no, ¿cuáles son las palancas adecuadas para lograr que eso suceda?

Editar: Parte de mi confusión fue causada por la búsqueda en contra de los campos no predeterminados vs campos predeterminados. Sabiendo esto, el único formato que funciona consistentemente es el primer formato.

+0

Por favor [no agregue firmas ni eslóganes a sus publicaciones] (http://stackoverflow.com/faq#signatures). – meagar

Respuesta

6

Si yo fuera tú me gustaría tratar de utilizar:

Title:(Brown Chicken) 

soportes harán que sea equivalente a su consulta no 1. La cotización forzará a Solr a buscar la coincidencia exacta, incluidos el espacio y el orden

+0

Perfecto. ¡Gracias! – jmacinnes

+0

¿Está seguro de que solo arroja resultados que contienen todos los términos? – vefthym

+0

Estoy seguro (caso general), a menos que su operador bool predeterminado sea "O" o use 'edimax' con' mm' – Fuxi

2

Pruebe Title:"Brown Chicken" o use el analizador de consultas Dismax para manejar sus consultas.


El wiki for lucene query parser habla (el énfasis es mío):

.... Desde texto es el campo predeterminado, no se requiere que el indicador de campo.

Nota: El campo sólo es válido para el término que que precede directamente a, lo que la consulta

título: Hacerlo bien

sólo se encuentra "hacer" en el campo de título . Encontrará "it" y "right" en el campo predeterminado (en este caso, el campo de texto).

¿Tiene solo el campo del título en su modelo de datos?

Por favor, ejecute debugQuery=on para explicar su consulta para ver cómo están marcados: verlo en acción https://stackoverflow.com/a/9262300/604511

+0

No, hay múltiples campos en mis documentos. Título es el campo predeterminado, por lo que explica algunas de las rarezas que estaba viendo. Usar citas no funciona; hace cumplir el orden de los plazos. Con esta información, parece que la única forma de lograr lo que quiero es este formato: Título: Brown AND Título: Chicken. Desafortunadamente, poco complicado es analizar una palabra clave en esa forma. Buscaré en Dismax. – jmacinnes

+0

"impone orden de término" debería haber sabido: -/ – aitchnyu

Cuestiones relacionadas