2011-02-02 7 views
8

Estamos utilizando Lucene para la búsqueda de texto como parte del sitecore. ¿Hay algún método para ignorar las palabras de detención (como a, an, the ...) en la búsqueda del sitecore?detener palabras en el sitio

+0

¿Cuál es el caso de uso de esto? Si busca ** el gato en el sombrero **, ¿realmente quiere buscar como ** sombrero de gato **? ¿O quiere decir que los filtra en los resultados? –

Respuesta

14

De forma predeterminada, Sitecore utiliza el analizador estándar Lucene - Lucene.Net.Analysis.Standard.StandardAnalyzer. Puede ver que esto se define en el elemento /configuration/sitecore/search/analyzer del archivo web.config. Uno de los constructores de la clase StandardAnalyzer acepta la matriz de cadenas que considerará detener palabras. Por defecto se utiliza la lista codificada de palabras funcionales que incluyen:

"un", "una", "y", "son", "como", "a", "ser", "pero "," por "," para "," si "," en ", " en "," es "," ello "," no "," no "," de ", " en "," o "," such "," that "," the ", " their "," then "," there "," these ", " ellos "," this "," to "," was "," will " ", 'con'

Si desea anular este comportamiento, creo que debe heredar StandardAnalyzer y anular su constructor por defecto para tomar la parada w ords de otra fuente en lugar de la matriz codificada. Tienes varias opciones, incluso leerlas desde un archivo de texto. No olvide reemplazar la clase estándar con la suya en web.config.

Vea otros constructores de la clase StandardAnalyzer para más detalles. .NET Reflector es tu amigo aquí.

+0

Gracias .. si puedes compartir el corazón del código ... – rahul

+0

¿Qué quieres decir? El código que menciono en la respuesta anterior se coloca en Lucene.Net.dll (en la carpeta Sitecore/bin). Puede explorar esta biblioteca de terceros con .NET Reflector. Lo que propongo hacer en su caso es crear una nueva clase, heredarla de StandardAnalyzer y hacer que el constructor predeterminado busque las palabras de detención de otra manera (de la manera que elija). Hay ejemplos de esto en el código de otros constructores de la clase StandardAnalyzer. –

+1

BTW, Alex Shyba acaba de publicar una increíble publicación de blog resumen sobre la búsqueda con Sitecore & Lucene: http://sitecoreblog.alexshyba.com/2011/02/8-reasons-to-use-new-search-in-sitecore. html. Esta publicación también está llena de enlaces útiles a varios recursos sobre el tema. ¡Asegúrate de verificarlo antes de avanzar en esta área! –

4

Un ejemplo de Yans mensaje:

public class CaseAnalyzer : Lucene.Net.Analysis.Standard.StandardAnalyzer 
{ 
    private static Hashtable stopWords = new Hashtable(); //{{"by","by"}}; <-- Makes "by" a stopword that will not be matched in analyzer 
    public CaseAnalyzer() : base(Lucene.Net.Util.Version.LUCENE_29, stopWords) 
    {  
    } 
} 

esto debe ser registrado en el web.config bajo

/configuration/sitecore/search/analyzer 

un ejemplo del registro analizador de

<caseanalyzer type="EBF.Business.Search.Analyzers.CaseAnalyzer, EBF.Business, Version=1.0.0.0, Culture=neutral"/> 

Por último se solo necesita registrar su analizador en la configuración de búsqueda como thi s

<Analyzer ref="search/caseanalyzer" /> 
Cuestiones relacionadas