2014-02-05 3 views
7

Ich habe festgestellt, dass Suchanfragen, die "von", "und", "die" usw. enthalten, keine Ergebnisse zurückgeben, weil Lucene Stoppwörter entfernt hat. Wenn ich also nach einem Gegenstand suche, der den Titel "Nachwirkungen des ersten Weltkriegs" trägt, werde ich null Ergebnisse erhalten.Entfernt die ContentSearch-API von Sitecore 7 Stoppwörter von Abfragen?

Aber wenn ich 'von' und 'der' strippe, dann suche ich nach "Nachwirkungen erster Weltkrieg". Ich werde das erwartete Dokument zurückbekommen.

Entfernt die ContentSearch-API Stoppwörter von Abfragen? Ist das etwas, das man konfigurieren kann, um Lucene zu entfernen? Oder sollte ich diese Stoppwörter vor dem Erstellen meiner Abfrage entfernen?

Dank Adam

Antwort

1

Ich denke, das mit Problem aus diesem blog das gleiche Problem.

Können Sie versuchen, die Schritte aus dem Blogpost zu folgen?

Andere Option kann sein, einen benutzerdefinierten Analysator zu erstellen und dem Konstruktor Ihre StopWords-Liste zu geben. Etwas wie:

public class CustomAnalyzer : Lucene.Net.Analysis.Standard.StandardAnalyzer 
{ 
    private static Hashtable stopWords = new Hashtable() 
    { 
     {"of", "of"}, 
     {"stopword2", "stopword2"} 
    }; 
    public CustomAnalyzer() : base(Lucene.Net.Util.Version.LUCENE_30, stopWords) 
    {  
    } 
} 

Nachdem Sie ändern Sie Ihre Konfigurationsdatei ändern müssen. Ein schöner Blogeintrag über Analyzer finden Sie here. P.S .: Ich habe meinen Code nicht getestet, wenn er wirklich funktioniert.

2

Sie können Sitecore Standard Analyzer so konfigurieren, dass Sie Ihren eigenen benutzerdefinierten Satz von Stoppwörtern akzeptieren. Erstellen Sie eine Textdatei mit den Stoppwörter (One-Stop-Wort pro Zeile) und dann machen die unter Konfigurationsänderungen in der Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config

<param desc="defaultAnalyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider"> 
    <param desc="defaultAnalyzer" type="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net"> 
    <param hint="version">Lucene_30</param> 
     <param desc="stopWords" type="System.IO.FileInfo, mscorlib"> 
     <param hint="fileName">[FULL_PATH_TO_SITECORE_ROOT_FOLDER]\Data\indexes\stopwords.txt</param> 
     </param> 
    </param> 
</param> 

Weiterführende Literatur file: Ich habe einen Blog-Beitrag geschrieben über dieses Problem und könnte hilfreich sein http://blog.horizontalintegration.com/2014/03/19/sitecore-standard-analyzer-managing-you-own-stop-words-filter/

+0

Links zu Webseiten sind keine guten Antworten, auch wenn sie die Frage beantworten. Die Antwort einschließlich des relevanten Codes sollte in der SO-Site enthalten sein. – Novocaine

+0

Novocaine88, vielen Dank für den Kommentar, ein Neuling zu SO hilft das sicherlich. –

+0

Gibt es eine Möglichkeit, relativen Pfad anstelle von absoluten Pfad zu der Datei stopwords.txt zu verwenden? Ich habe so etwas versucht, aber es funktioniert nicht: $ (dataFolder)/stopwords.txt – chenz

Verwandte Themen