2012-04-27 16 views
8

Tengo dos documentos y estoy usando Luke para investigar, he confirmado en el código que tiene el mismo comportamiento, usando StandardAnalyzer.Lucene .net Boost no funciona cuando se usa * comodín

Documento uno con impulso 1

stored/uncompressed,indexed,tokenized<Description:Nummer ett> 
stored/uncompressed,indexed,tokenized<Id:2> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Documento dos con impulso 2

stored/uncompressed,indexed,tokenized<Description:Nummer två> 
stored/uncompressed,indexed,tokenized<Id:1> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Buscar apa en el campo Nombre devoluciones con impulso utilizado y en el orden correcto.

Document 2 has Score 1,1891 
Document 1 has Score 0.5945 

búsqueda ap * devoluciones en ningún orden y la misma puntuación

Document 1 Score 1.0000 
Document 2 Score 1.0000 

búsqueda apa * devoluciones en ningún orden y mismo marcador

Document 1 Score 1.0000 
Document 2 Score 1.0000 

Por qué es esto? Me gustaría devolver algunos documentos con mayor valor de impulso, incluso si tengo que usar comodines. es posible?

¡Saludos a todos los codificadores geniales!

Esto es lo que quiero hacer cómplice.

Una cadena de búsqueda y desea coincidencias. Usando comodín. Buscar "Lu" + "*"

Document 
Name 
City 

Me gustaría que el documento cuyo nombre es Lund para obtener mayor calificación que el documento con el nombre Lunt o ciudad es Lund por ejemplo. Esto se debe a que sabré qué documentos son los más populares. Quiero obtener los documentos con la ciudad de Estocolmo y los nombres de Estocolmo y Stockholmen, pero ordenado como yo elija.

Respuesta

10

Desde WildcardQuery es una subclase de MultiTermQuery que está recibiendo la puntuación constante de 1.

Si marca la definición de t.getBoost():

t.getBoost() es un impulso tiempo de búsqueda del término t en la consulta q como especificada en el texto de la consulta (consulte la sintaxis de la consulta), o como se establece mediante las llamadas a la aplicación a setBoost(). Tenga en cuenta que no existe realmente ninguna API directa para acceder a un impulso de un término en una consulta de varios términos, pero términos bastante múltiples se representan en una consulta como objetos de TermQuery múltiples, por lo que el impulso de un término en la consulta es accesible por llamando a la getBoost sub-query()

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/Similarity.html#formula_termBoost

una posible corte podría ser fijar método de reescritura de analizador de consulta:

myCustomQueryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) 
+0

Esto es una respuesta que hà Es muy difícil encontrar tanto buscando en el libro como buscando. Gracias, será mucho más fácil resolver el problema sabiendo cómo funciona. – JustusTh

+0

@JustusTh Es bueno saber que te ayudó. – ZeNo

+0

Sí ayudó, pero tal vez no todo el camino hasta ahora, trabajará en ello. Pensé que sería simple porque mi problema es algo que creo que muchos querrían. – JustusTh

Cuestiones relacionadas