java 高级查询插件_高级搜索插件solis search在umbraco中的使用

好久没有写关于umbraco的博客了,这段时间在研究solis search,感觉它太强大,好东西是需要分享的,所以写一篇简单的使用博客分享给个人umbraco爱好者。

简介

在了解solis search之前,我们需要简单的了解apache solr, Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。更详细的介绍请充分利用搜索引擎,这里就不做详细介绍了。

solis search就是基于apache solr开发的一个umbraco的插件。它在做了简单的配置之后,就可以检索到umbraco content里面的几乎所有的文字内容,包括上传的文档或者选择的media picker中的文档(word, pdf, excel 等等)。

下载安装

1. 安装JAVA环境

安装java环境是为了运行apache solr server.

下载后安装,安装之后请配置环境变量,是java命令可以直接在命令行根目录运行。如何配置环境变量在这就不介绍了。

2. 安装apache solr

下载地址:http://lucene.apache.org/solr/,这里记住,一定要下载4.5.1版本的,不然使用会出现未知的错误。因为solis search是基于version 4.5开发的。

操作简要说明:

解压压缩包到电脑的任意位置,建议目录全是英文的

打开cmd,进入到目录:solr-4.5.1\example

091af1eec090b99bd50b2664512caf45.png

运行> java -jar start.jar启动solr server.

3. 安装 solis search package

782b942cd6288e7f4a6d0481b87c16e2.png

安装之后,找到安装包里面的schema.xml和solrconfig.xml然后 复制到solr的文件夹solr-4.5.1\example\solr\collection1\conf\下面,这一步很重要,然后重启solr server: java -jar start.jar

接着就是rebuild index:

d11456d9f5aa88f8031f0eec632a8c45.png

当然在rebuild index之前要根据具体的需要修改配置文件。

在这里,我将我的配置贴出来,并且做简单的介绍,

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0"?>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

View Code

SolrServer:配置solr server的 地址,用户名以及license key.

SearchSettings: 配置当前search的环境,支持的语言,链接操作符,是否高亮等等

DocTypes:这个是重点,用来配置可以搜索出来的content字段

1

2

3

4

5

6

7

8

name="newsItem": 将名为newsItem的document type添加到可搜索列表;

addPageNameToContent="true": 表示该document type的name是可搜索的;

Properties: 指定该document type中哪些property是可以被搜索的;

Property: name - 标示符, property - 属性名, type - 搜索的类型, content - 搜索的是内容值

type="relatedLinks": 表示使用solis search的方法去搜索,一般用来搜索word文档,pdf文档中的内容, 需要添加 parser="SolisSearch.Parsers.RelatedLinksParser,SolisSearch".

这里的p3和p4表示添加了media picker类型以及upload的类型的属性是可以搜索的。

搜索view代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 @using System.Activities.Statements2 @using System.Globalization3 @using SolisSearch.Helpers4 @using SolisSearch.Repositories5 @inherits Umbraco.Web.Macros.PartialViewMacroPage6

7 @{8 Layout = "../Master.cshtml";9 }10

11

12

@ViewBag.Title

13

@ViewData["content"]

14

15 @{16 var query = HttpUtility.UrlDecode(Request.QueryString["q"]);17 var fq = new List();18

19

20

21 $(document).ready(function () {22

23 $("#txtSearch").keydown(function (e) {24 if (e.which == "13") {25 $("#searchform").submit();26 }27 });28

29 $(".facetlink").click(function () {30 var filter = $(this).attr("data-filter");31 $("#filters").append("");32 $("#searchform").submit();33

34 });35

36 $("#filters").on("click", "a", function () {37 $(this).prev("input").remove();38 $("#searchform").submit();39 });40 });41

42

43

44

45

46 Search

47

48 @if (!String.IsNullOrEmpty(Request["fq"]))49 {50 fq.AddRange(Request["fq"].TrimEnd(Convert.ToChar("¤")).Split(new[] { "¤,"}, StringSplitOptions.RemoveEmptyEntries));51 }52

53

54 @{55 if(fq.Any())56 {57

Active filters (Click to remove)

58 foreach (var field infq)59 {60

61 @Html.Raw(GetFriendlyCategoryName(RangeFormatHelper.FormatRange(field))) 

62 }63

64 }65 }66

67

68

69

70

71

72 if (!String.IsNullOrEmpty(query) ||fq.Any())73 {74 var languageName =CultureInfo.CurrentCulture.TwoLetterISOLanguageName;75

76 var searchRepo = newSearchRepository();77 var searchResultItems = searchRepo.SearchIndex(query, fq.ToArray(), 1, 0, null);78

79 if(searchResultItems.SpellChecking.Any())80 {81

82

Did you mean

83 @foreach (var spellitem insearchResultItems.SpellChecking)84 {85

86 foreach (var suggestion inspellitem.Suggestions)87 {88

@suggestion

89 }90

91 }92

93 }94

95

96

97 @if (searchResultItems.FacetFields.Any())98 {99 var doctypesFacets = searchResultItems.FacetFields["doctypes"];100

Category

101

102 @{103 foreach (var keyValuePair indoctypesFacets)104 {105 var friendlyname =GetFriendlyCategoryName(keyValuePair.Key);106 if(String.IsNullOrEmpty(friendlyname))107 {108 continue;109 }110

111

112

113 @Html.Raw(friendlyname + "(" + keyValuePair.Value + ")")114

115

116 }117 }118

119

120

121

122 }123

124

125 @if (searchResultItems.FacetQueries.Any())126 {127

Date modified

128

129 @foreach (var facetqueries insearchResultItems.FacetQueries)130 {131

132

133 @Html.Raw(RangeFormatHelper.FormatRange(facetqueries.Key) + "(" + facetqueries.Value + ")")134

135

136 }137

138 }139

140

141

142

143 if(searchResultItems.Any())144 {145

146

@string.Format("Total of {0} items found", searchResultItems.NumFound)

147

148 @foreach (var searchitem insearchResultItems)149 {150

151

@Html.Raw(searchitem.Name ?? searchitem.DocumentTitle.FirstOrDefault() ?? Path.GetFileNameWithoutExtension(searchitem.ResourceName))

152 @{153 var highlightedSnippets =searchResultItems.Highlights[searchitem.Id];154 if (highlightedSnippets != null &&highlightedSnippets.Any())155 {156 foreach (var highlightItem inhighlightedSnippets)157 {158 @Html.Raw(string.Join(" ", highlightItem.Value))159 }160 }161 else

162 {163 var contentString = string.Join(" ", searchitem.Content);164 @Html.Raw(contentString.Substring(0, Math.Min(contentString.Length, 175)))165 }166 }167

168 }169

170

171

172 }173 else

174 {175

No search results

176 }177 }178 }179

180 @functions181 {182

183 private string GetFriendlyCategoryName(stringdoctype)184 {185 if (doctype.Contains("/")) returndoctype;186 switch(doctype)187 {188 case "newsItem":189 return "News Item";190 case "umbHomePage":191 return "Article";192 default:193 return "Others";194

195 }196 }197

198 }

View Code

做了如上操作后,就可以开始使用solis search进行操作了。

有错误的地方,欢迎指出。

参考:

尊重原创,转载请说明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值