隐藏

Solr学习总结(五)SolrNet的基本用法及CURD

发布:2022/10/21 11:31:04作者:管理员 来源:本站 浏览次数:415

这里在讲讲C#是如何通过客户端请求和接受solr服务器的数据, 这里推荐使用SolrNet,主要是:SolrNet使用非常方便,而且用户众多,一直都在更新,感兴趣的可以加入他们的邮件群组,方便迅速了解SolrNet的最新动态。




SorlNet源码地址:https://github.com/mausch/SolrNet


SolrNet使用说明文档:https://github.com/mausch/SolrNet/tree/master/Documentation


一、创建一个项目控制台程序,并引用SolrNet.dll。Demo下载




注意:SolrNet 依赖HttpWebAdapters.dll和Microsoft.Practices.ServiceLocation.dll 这两个dll 文件,所以,如果编译或者测试有问题,引用这两个dll 文件应该就ok了。




二、在solr 的schema.xml 增加相关的Filed 字段,同时创建一个实体类,与schema.xml中的Filed 字段映射。


public class Product

   {

       [SolrUniqueKey("id")]

       public int id { get; set; }


       [SolrField("name")]

       public string name { get; set; }


       [SolrField("title")]

       public string title { get; set; }


       [SolrField("category")]

       public string category { get; set; }


       [SolrField("content")]

       public string content { get; set; }


       [SolrField("price")]

       public double price { get; set; }


       [SolrField("color")]

       public string color { get; set; }


       [SolrField("updatetime")]

       public DateTime updatetime { get; set; }


       [SolrField("orderBy")]

       public int orderBy { get; set; }

   }


同时,schema.xml中也要加上相应的Filed 字段,打开solr_home\mycore1\conf 下的schema.xml文件,增加如下Field 配置,如果不知道如何操作,请参考前一篇文章,《Solr学习总结(二)Solr的安装与配置》

复制代码


  <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="name" type="string" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="title" type="string" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="category" type="string" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="content" type="string" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="price" type="double" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="color" type="string" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="orderBy" type="int" indexed="true" stored="true" required="true" multiValued="false" />

  <field name="updatetime" type="date" indexed="true" stored="true" required="true" multiValued="false" />


三、开始调用solrnet:


     1.初始化


Startup.Init<Product>("http://localhost:8080/solr/mycore1");




2.增加和修改索引(document)


Solr 索引的增加和修改,都是Add() 方法,solr 会自动判断是否存在此所以,有就修改,没有就新增。


ISolrOperations<Product> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Product>>();


        var p = new Product()

            {

                id = 201,

                name = "product 201",

                title = "title 201",

                category = "201",

                content = "title 201 green",

                color = "green",

                price = 67.92,

                updatetime = DateTime.Now.AddDays(-101),

                orderBy = 101

            };

       solr.Add(p);

       solr.Commit();




3. 删除索引


solrnet 重写了多个 delete()方法。这里只介绍一个,其他的自己研究吧。


ISolrOperations<Product> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Product>>();


       var p = new Product()

       {

            id = 201,

       };


       solr.Delete(p);

       solr.Commit();


注意:调用 Add() 或是 Delete()方法,必须在他们之后加上  Commit(),否是请求是不会被处理的。




4.查询


           ISolrOperations<Product> solr = ServiceLocator.Current.GetInstance<ISolrOperations<Product>>();


           SolrQueryResults<Product> phoneTaggedArticles = solr.Query(new SolrQuery("id:1"));


           foreach (Product p in phoneTaggedArticles)

           {

               Console.WriteLine(string.Format("{0}: {1}", p.id, p.title));

           }

           Console.WriteLine();



到这里,Solrnet的基本用法已经说完了,下一篇,将聊聊Solr的一些高级用法,solr 的复杂查询,高亮,Facet分组查询等。