Solr 自己手动编写搜索引擎

1、solr的安装:如果没配置环境变量JAVA_HOME和PATH,则先配置,指向JDK1.8环境;

2.  解压solr;命令行进入solr的bin目录,执行solr.cmd start,命令窗口不要关;

 

 

3.  浏览器打开http://127.0.0.1:8983/。这是以集成的jetty服务器方式去运行。还可以部署到tomcat上。

4.创建数据的core

1)server\solr\创建文件夹movies

2)把solor的server\solr\configsets\basic_configs下的conf拷贝到server\solr\movies下

3 )创建core(名字movies),相当于表:

浏览器中打开solr控制台“Core Admin”→【Add core】,name和instanceDir都填movies,其他保持默认值。

5)、创建字段:打开movies这个core,Add Field,增加相应的字段(id是内置的不用建,string类型): title、 ed2k、 content。stored代表“保存原始数据”(后续搜索的时候可以读取出来)、indexed代表“进行索引保存”(可以根据这个字段进行搜索)。

 

索引的插入:C#

1.添加引用:

 

2:数据插入(创建movie对象)

 1 using SolrNet.Attributes;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace Solrtest
 9 {
10   public class Movie
11     {
12         [SolrField("id")]
13         public string Id { set; get; }
14 
15         [SolrField("title")]
16         public string  Title { set; get; }
17 
18         [SolrField("content")]
19         public string  Content { set; get; }
20 
21         [SolrField("ed2k")]
22         public string  Ed2k { set; get; }
23 
24     }
25 }

插入数据,搜索数据

 1 using Microsoft.Practices.ServiceLocation;
 2 using SolrNet;
 3 using SolrNet.Commands.Parameters;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 
10 namespace Solrtest
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             //添加对象
17             
18             SolrNet.Startup.Init<Movie>("http://127.0.0.1:8983/solr/movies2");
19             ISolrOperations<Movie> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Movie>>();
20             Movie movie = new Movie();
21             movie.Id = "888888888888";
22             movie.Content = "王宝强三打马蓉";
23             movie.Ed2k = "ed2k://";
24             movie.Title = "王宝强三打马蓉";
25             solr.Add(movie);
26             solr.Commit();
27              
28             //搜索对象
29             
30             QueryOptions option = new QueryOptions();
31             option.AddOrder(new SortOrder("id", Order.DESC));
32             option.StartOrCursor = new SolrNet.StartOrCursor.Start(0);
33             option.Rows = 10;
34             SolrQuery query = new SolrQuery("content:\"马蓉\"");
35             SolrQueryResults<Movie> results = solr.Query(query, option);
36             Console.WriteLine("总条数:" + results.NumFound);
37             for (int i = 0; i < results.Count; i++)
38             {
39                 Movie movie1 = results[i];
40                 Console.WriteLine(movie1.Title);
41             }
42              
43             Console.ReadKey();
44 
45 
46 
47         }
48     }
49 }

更多搜索方法:

1、 SolrQuery query = new SolrQuery();是查询条件

2、 SolrQuery query = new SolrQuery();

query.setQuery(“description:\”王宝强\””);// description字段中包含”王宝强”的

QueryResponse resp = solr.query(query);

SolrDocumentList list =  resp.getResults();

3、查询语法,支持AND、OR、NOT(必须是大写的),支持()运算符。

1)、title:杨中科 是只要title中有“杨中科”任何一个的都匹配,如果想完全匹配的就用 title:"杨中科"

2)、范围比较。age在3到5之间的: Age:[3 TO 5]。age大于5的 Age:[5 TO *]

4、排序:

solrQuery.setSort("area", ORDER.desc);

5、分页查询:

solrQuery.setStart(起始行数 0开始);//limit 5,10

solrQuery.setRows(取的条数);

QueryResponse的getResults()为当前页查询的数据;

SolrDocumentList的getNumFound()为查询结果总条数;

 

posted @ 2016-10-24 15:43  墨水心2016  阅读(263)  评论(0编辑  收藏  举报