2009-06-10 6 views
6

Estoy trabajando en una API de búsqueda de empresas con Lucene. Mi Guía de empresas Lucene tiene 2 empresas: 1.Abigail Adams National Bancorp, Inc. 2.National BancorpEncontrar la coincidencia exacta con la API de búsqueda de Lucene

Si el usuario escribe en National Bancorp, a continuación, única empresa # 2 (.) Es decir Bancorp Nacional deben estar devuelto y no # 1 ..... es decir. solo se deben devolver las coincidencias exactas. ¿Cómo logro esta funcionalidad?

Gracias por leer.

+0

Buscadores futuros: si solo está buscando un servicio indexado de lucene, la respuesta de Somonath Sabat sin votos ascendentes parece ser correcta al menos en una instancia: coloque la frase entre comillas dobles. Verificado contra musicbrainz. –

Respuesta

11

Puede usar KeywordAnalyzer para indexar y buscar en este campo. Keyword Analyzer generará solo un token para toda la cadena.

+0

¿Puedes responder este? http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests –

1

Es posible que desee reconsiderar sus requisitos, dependiendo de si entendí correctamente su pregunta o no. Por favor desnúdate conmigo si te entendí mal.

Sólo un poco de alimento para el pensamiento:

  • Si sólo desea exactas partidos devueltos, entonces ¿por qué busca, en primer lugar?

  • ¿Estás seguro de que el usuario espera coincidencias exactas? Normalmente busco asumiendo que el motor de búsqueda acomodará las palabras que faltan.

  • Supongamos que el usuario busca Banco Nacional pero Banco Nacional ya no estaba en su índice. ¿Todavía desea Abigail Adams National Bancorp, Inc para ser excluido de los resultados simplemente porque no era una coincidencia exacta?

A la luz de esto, yo sugeriría que siguen presentando todas las posibles coincidencias exactas (o no) al usuario y dejarlos decidir por sí mismos qué es lo más apropiado para ellos. Digo esto simplemente porque es posible que no estés pensando de la misma manera que todos tus usuarios. Lucene se encargará de asegurarse de que las partidas más cercanas tengan el rango más alto en los resultados, ayudándoles a tomar decisiones más rápidas.

1

Esto es algo que puede garantizar el uso del filtro de tejas. Este filtro agrupa varias palabras juntas. Por ejemplo, Abigail Adams National Bancorp con un ShingleFilter de 3 tokens produciría (suponiendo un sencillo WhitespaceAnalyzer) [Abigail], [Abigail Adams], [Abigail Adams National], [Adams National Bancorp], [Adams National], [Adams] , [Nacional], [National Bancorp] y [Bancorp].

Si un usuario consulta National Bancorp, obtendrá una coincidencia exacta en National Bancorp, y un resultado exacto menor en Abigail Adams National Bancorp (menor calificación porque este tiene muchos más símbolos en el campo, así bajando el IDF). Creo que tiene sentido devolver ambos documentos en dicha consulta.

Es posible que desee aplicar el filtro de tejas en el momento de la consulta también, según el caso de uso.

1

Busqué en Google sin mucha ayuda por el mismo problema. Después de rascarme la cabeza por un rato, encontré la solución. Busque la cadena entre comillas dobles, que resolverá su problema.

National Bancorp devolverá el # 1 y el # 2, pero "National Bancorp" devolverá el # 2.

Cuestiones relacionadas