Удаляет ли Sitecore 7 ContentSearch API стоп-слова из запросов?

Я обнаружил, что поиски, содержащие "of", "and", "the" и т. Д., Не будут возвращать результаты, потому что Lucene удалил стоп-слова. Поэтому, если я буду искать предмет с названием "Последствия первой мировой войны", я получу ноль результатов.

Но если я уберу слова "из" и "то", то я ищу "последствия первой мировой войны". Я верну ожидаемый документ.

Удаляет ли ContentSearch API стоп-слова из запросов? Это то, что можно настроить Lucene для удаления? Или я должен удалить эти стоп-слова перед построением моего запроса?

Спасибо адам

2 ответа

Вы можете настроить Sitecore Standard Analyzer для принятия собственного настраиваемого набора стоп-слов. Создайте текстовый файл со стоп-словами (одно стоп-слово в строке), а затем внесите следующие изменения в конфигурацию файла 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>   

Дальнейшее чтение: я написал сообщение в блоге об этой проблеме и мог бы помочь http://blog.horizontalintegration.com/2014/03/19/sitecore-standard-analyzer-managing-you-own-stop-words-filter/

Я думаю, что это та же проблема с проблемой из этого блога.

Можете ли вы попробовать выполнить действия, описанные в сообщении в блоге?

Другим вариантом может быть создание собственного анализатора и предоставление конструктору вашего списка стоп-слов. Что-то вроде:

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

После внесения изменений вам необходимо изменить ваш конфигурационный файл. Хороший пост в блоге об Analyzer вы можете найти здесь. PS: я не пробовал свой код, если он действительно работает.

Другие вопросы по тегам