2017-06-08 1 views
2

Ich habe ein berechnetes Feld, das Informationen aus den Unterelementen eines Elements übernimmt und sie in ein neues Feld auf dem Element verknüpft.Sitecore 8.2 Lucene-Suche indexiert nicht alle Begriffe in einem berechneten Feld

Wenn ich durch den Debugger gehe, kann ich sehen, dass das berechnete Feld die richtige Information zurückgibt. Wenn ich die Indizes überprüfe, die von Sitecore unter Verwendung Luke erzeugt werden, kann ich das berechnete Feld mit den korrekten Werten auch sehen. Wenn ich jedoch eine Suche mit Luke (oder in Sitecore) nach einem Begriff im berechneten Feld durchführe, werden nicht immer alle Dokumente zurückgegeben, die diesen Begriff enthalten.

Ich glaube, dass dies mit Artikeln mit mehreren Sprachversionen verwandt sein kann. Zum Beispiel hat eines der Elemente eine niederländische Version und eine serbische (lateinische) Version. Sie enthalten beide das Wort "vooderlen" in ihrem Inhalt. Aber wenn ich nach diesem Begriff suche, wird nur das serbische Dokument zurückgegeben. Wenn ich nach "assisteert" suche, werden beide Dokumente zurückgegeben. Ich bin mir nicht sicher, warum einige Begriffe ignoriert werden.

Hier ist der entsprechende Code:

public class ChildContent : AbstractComputedIndexField 
{ 
    public override object ComputeFieldValue(IIndexable indexable) 
    { 
     Assert.ArgumentNotNull(indexable, "indexable"); 
     Item item = indexable as SitecoreIndexableItem; 

     if (item == null) 
     { 
      return null; 
     } 

     // Only compute child content for Detail Layout templates 
     string detailLayoutTemplateId = Settings.GetSetting("DetailLayoutTemplateId"); 

     if (item.TemplateID.ToString() != detailLayoutTemplateId) 
     { 
      return null; 
     } 

     // Get Content Detail item 
     string contentDetailId = item["Content Detail"]; 
     var valueString = new StringBuilder(); 
     Item contentDetailItem; 
     string introContent, mainContent; 

     if (string.IsNullOrEmpty(contentDetailId)) 
     { 
      return null; 
     } 

     contentDetailItem = item.Database.GetItem(ID.Parse(contentDetailId), item.Language); 

     if (contentDetailItem == null) 
     { 
      return null; 
     } 

     // Concatenate intro and main content 
     introContent = contentDetailItem["Intro Content"]; 
     mainContent = contentDetailItem["Main Content"]; 

     if (!string.IsNullOrWhiteSpace(introContent)) 
     { 
      valueString.Append(Regex.Replace(introContent, "<.*?>", " ") + " "); 
     } 

     if (!string.IsNullOrWhiteSpace(mainContent)) 
     { 
      valueString.Append(Regex.Replace(mainContent, "<.*?>", " ") + " "); 
     } 

     return valueString.ToString(); 
    } 
} 

ich auch die folgende Suche Konfiguration.

Antwort

1

Ich bemerkte, dass, wenn ich den DutchAnalyzer in Luke verwendete, ich mehr Ergebnisse für die niederländische Sprache bekommen konnte. Leider bietet Sitecore nicht mehr als ein paar Analysatoren, und keiner ist sprachspezifisch, es sei denn, Sie erstellen einen benutzerdefinierten Analysator.

Glücklicherweise brachte mich das auf die richtige Spur, und ich suchte nach verschiedenen Wegen, um Ergebnisse für die spezifische Sprache zu erhalten, die ich brauchte. Indem ich eine CultureExecutionContext in die GetQueryable Methode übergab, war ich in der Lage, die Ergebnisse zu erhalten, die ich erwartete.

var queryable = context.GetQueryable<SearchResultItem>(
    new CultureExecutionContext(
     CultureInfo.GetCultureInfo(Sitecore.Context.Language.ToString()) 
    ) 
); 
Verwandte Themen