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()为查询结果总条数;