Sitecore8.2 .net Solr搜索实现

Posted ljh19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sitecore8.2 .net Solr搜索实现相关的知识,希望对你有一定的参考价值。

基于Sitecore8.2&Solr5.1.0实现搜索功能,实现前台输入关键词返回相应结果。

Lucene 是 Sitecore CMS 中用于索引和搜索网站内容的开源搜索引擎。Sitecore 为拥有自己 API 的 Lucene 引擎实现了一个包装器。原 API (Lucene.Net) 和 Sitecore API (搜索。) 希望扩展索引和搜索功能的开发人员都可以访问。

在此之前,需要做一些准备工作,可访问另一篇文章进行安装Solr点击跳转至安装步骤

          var searchIndex = ContentSearchManager.GetIndex("sitecore_web_index"); // 获取搜索索引
                var values = Nohtml(val);//这里是去除了搜索关键词带的一些特殊字符,方法NoHTML(str)
                var searchPredicate = GetSearchPredicate(values); // 构建搜索谓词
                using (var searchContext = searchIndex.CreateSearchContext()) //获取搜索索引的上下文
               
                    var searchResults = searchContext.GetQueryable<SearchModel>().Where(searchPredicate); // 在索引中搜索与谓词匹配的项目

                    // 获得所有的结果
                    var fullResults = searchResults.GetResults();
                    Console.WriteLine(fullResults);
                    foreach (var hit in fullResults.Hits)
                    
                        //这里我加了一个判断,只获取某一结点下的全部结果
                        if (hit.Document._fullpath.Contains("newsindex"))
                        
                            myResults.Results.Add(new SearchResult
                            
                                news_title = hit.Document.bigtitle_t,
                                news_detail = hit.Document.details_t,
                                news_date = hit.Document.date_t,
                                _fullpath = hit.Document._fullpath,
                            );
                        
                    
                

下面的GetSearchPredicate()

public static Expression<Func<SearchModel, bool>> GetSearchPredicate(string searchTerm)
        
            //var predicate = PredicateBuilder.True<SearchModel>(); // Items which meet the predicate
            var predicate = PredicateBuilder.New<SearchModel>();
            string searchVal = HttpUtility.UrlDecode(searchTerm, Encoding.UTF8);
            /*
//这里是不分词的
predicate
= predicate.Or(x => x.bigtitle_t.Contains(searchVal));//文章标题 predicate = predicate.Or(x => x.description_t.Contains(searchVal));//文章描述 predicate = predicate.Or(x => x.details_t.Contains(searchVal));//详情
*/
//使用了盘古分词
Analyzer anal
= new PanGuAnalyzer();//使用盘古分词 System.IO.StringReader reader = new System.IO.StringReader(searchVal); Lucene.Net.Analysis.TokenStream ts = anal.TokenStream("", reader); bool hasnext = ts.IncrementToken(); List<string> list = new List<string>(); Lucene.Net.Analysis.Tokenattributes.ITermAttribute ita; while (hasnext) ita = ts.GetAttribute<Lucene.Net.Analysis.Tokenattributes.ITermAttribute>(); Console.WriteLine(ita.Term); list.Add(ita.Term); hasnext = ts.IncrementToken(); ts.CloneAttributes(); reader.Close(); anal.Close(); for (var i = 0; i < list.Count; i++) string str = list[i].ToString(); predicate = predicate.Or(x => x.bigtitle_t.Contains(str));//文章标题 predicate = predicate.Or(x => x.description_t.Contains(str));//文章描述 predicate = predicate.Or(x => x.details_t.Contains(str));//详情 return predicate;

在搜索时,Solr必须是启动的,可以把Solr安装成windows服务自动启动,这样就不用手动去启用。

以上是关于Sitecore8.2 .net Solr搜索实现的主要内容,如果未能解决你的问题,请参考以下文章

利用solr实现商品的搜索功能

solr 教程

#徐员外#Solr搜索 代码实现

Solr 是不是可用于 .Net?

搜索技术---solr

Solr基于Lucene实现搜索引擎