2011-02-02 14 views
8

Stiamo usando Lucene per la ricerca come parte di Sitecore. Esiste un metodo per ignorare le parole di arresto (come a, an, the ...) nella ricerca sitecore?parole stop a Sitecore

+0

A cosa serve questo? Se cerchi ** il gatto con il cappello **, vuoi veramente cercare come se fossi entrato in ** cat hat **? O vuoi dire filtrarli nei risultati? –

risposta

14

Per impostazione predefinita, Sitecore utilizza Lucene Analyzer Standard - Lucene.Net.Analysis.Standard.StandardAnalyzer. Puoi vedere che questo è definito nell'elemento /configuration/sitecore/search/analyzer del file web.config. Uno dei costruttori della classe StandardAnalyzer accetta la matrice di stringhe che prenderà in considerazione le parole di arresto. Di default utilizza l'elenco hardcoded di parole stop che includono:

"a", "an", "e", "sono", "come", "a", "essere", "ma " "con", "per", "se", "in", "in", "è", "it", "no", "no", "di", "on"," o " "come", "che", "il", "loro", "poi", "là", "questi", "loro", "questo", "a", "era"," sarà ", 'con'

Se vuoi ignorare questo comportamento, penso che si dovrebbe ereditare StandardAnalyzer e sovrascrivere il costruttore di default a prendere alla fermata w ords da un'altra fonte invece della matrice hardcoded. Hai varie opzioni, anche leggendo da un file di testo. Non dimenticare di sostituire la classe standard con la tua in web.config.

Vedi gli altri costruttori di StandardAnalyzer classe per maggiori dettagli. .NET Reflector è tuo amico qui.

+0

Grazie .. se puoi condividere il cuore del codice .. – rahul

+0

Cosa intendi? Il codice di riferimento I nella risposta sopra è inserito in Lucene.Net.dll (nella cartella Sitecore/bin). Puoi sfogliare questa libreria di terze parti con .NET Reflector. Quello che mi propongo di fare nel tuo caso è creare una nuova classe, ereditarla da StandardAnalyzer e fare in modo che il costruttore predefinito cerchi le parole di stop in un altro modo (nel modo in cui scegli tu). Ci sono esempi di questo nel codice di altri costruttori della classe StandardAnalyzer. –

+1

BTW, Alex Shyba ha appena pubblicato un post sul blog straordinaria sintesi sulla ricerca con Sitecore e Lucene: http://sitecoreblog.alexshyba.com/2011/02/8-reasons-to-use-new-search-in-sitecore. html. Questo post è anche pieno di link utili a varie risorse sull'argomento. Assicurati di controllare prima di andare avanti in questa zona! –

4

Un esempio per Yans postale:

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) 
    {  
    } 
} 

questo dovrebbe essere registrato nel web.config sotto

/configuration/sitecore/search/analyzer 

un esempio della registrazione analizzatore

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

Infine si Basta registrare l'analizzatore nella configurazione di ricerca come thi s

<Analyzer ref="search/caseanalyzer" />