Удаляет ли 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: я не пробовал свой код, если он действительно работает.