Sitecore 9 Indexing: не работает токенайзер Solr Pattern - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в этой комбинации sitecore и solr. У меня небольшая проблема с токенайзером шаблона, который не работает .. Я следую этой документации

Solr: https://lucene.apache.org/solr/guide/6_6/tokenizers.html#Tokenizers-RegularExpressionPatternTokenizer)

Sitecore 9 Solr: https://doc.sitecore.net/sitecore_experience_platform/setting_up_and_maintaining/search_and_indexing/using_solr_field_name_resolution

Когда я делаю индексацию, значение моего поля: a, b, c, и я ожидал, что в solr это будет ["a "," b "," c "], но содержит [" a, b, c "]

Это моя конфигурация Sitecore

<fieldMap>
   <typeMatches hint="raw:AddTypeMatch">
      <typeMatch type="System.Collections.Generic.List`1[System.String]" typeName="commaDelimitedCollection" fieldNameFormat="{0}_cd" 
         multiValued="true" settingType="Sitecore.ContentSearch.SolrProvider.SolrSearchFieldConfiguration, Sitecore.ContentSearch.SolrProvider"/>
   </typeMatches>
   <fieldNames hint="raw:AddFieldByFieldName">
      <field fieldName="Keywords" returnType="commaDelimitedCollection"/>
   </fieldNames>
</fieldMap> 

Это моя схема Solr

<fieldType name="commaDelimited" class="solr.TextField" multiValued="true">
    <analyzer>
      <tokenizer class="solr.PatternTokenizerFactory" pattern="\s*,\s*"/>
    </analyzer>
  </fieldType>

<dynamicField name="*_cd" type="commaDelimited" multiValued="true" indexed="true" stored="true"/>

Есть идеи, что не так с моей конфигурацией выше?

Спасибо

1 Ответ

0 голосов
/ 25 сентября 2018

Не уверен, получу ли я полную картину здесь.Может быть, ваш подход совершенно оправдан, но я не думаю, что видел его раньше.Вместо определения нового типа вы можете повторно использовать *_sm (многозначная строка) и выполнить разбиение строки во время индексации на стороне Sitecore.Обычно вам не нужно больше типов полей, чем те, которые предоставляет sitecore, и обычно проще поддерживать весь код в вашем решении VS, а не зависеть от дополнительной конфигурации Solr.(В Sitecore 9 вы можете развернуть управляемую схему Solr из панели управления.)

Простое поле вычисляемого поля может выглядеть так:

<fields hint="raw:AddComputedIndexField">
  <field fieldName="keywords" returnType="stringCollection">
    Your.Name.Space.YourComputedFieldClass, YourAssembly
  </field>
</fields>

И реализация класса может выглядеть как-токак это:

public class YourComputedFieldClass : IComputedIndexField
{
  public object ComputeFieldValue(IIndexable indexable)
  {
    var item = indexable as SitecoreIndexableItem;
    var fieldValue = item?.Item?["Keywords"]
    if (string.IsNullOrWhitespace(fieldValue)) {
      return null;
    }
    return fieldValue.Split(',');
  }

  public string FieldName { get; set; }

  public string ReturnType { get; set; }
}
...