solr笔记 solrnet客户端实现高亮显示以及搜索建议(四)
solrnet使用
1.首先引入solrnet的dll http://pan.baidu.com/s/1bpA3OnX
这个是我封装的代码呼呼 http://pan.baidu.com/s/1c2drMqk
gloab.asax 需要配置
泛型类型为你的接收实体类型 参数为核心 我现在是多核心 默认应该是
同时接收实体要映射solr字段
public class Product { [PrimaryKey(SequenceExpression = "Seq_Product_ProductID"), SolrUniqueKey("id")] public string ProductID { get; set; } /// <summary> /// 记录ID /// </summary> [DBDefault, SolrField("Recordid")] public string RecordID { get; set; } /// <summary> /// 名称 /// </summary> [SolrField("ProductName")] public string Name { get; set; } /// <summary> /// 型号 /// </summary> public string Model { get; set; } /// <summary> /// 成本价 对应出厂价 /// </summary> [SolrField("CostPrice")] public double CostPrice { get; set; } //批发价 对应套餐优惠价 [SolrField("WholesalePrice")] public double WholesalePrice { get; set; } /// <summary> /// 零售价 对应套餐零售价 /// </summary> [SolrField("productprice")] public double RetailPrice { get; set; } /// <summary> /// 市场价 对应市场价 /// </summary> [SolrField("MarketPrice")] public double MarketPrice { get; set; } /// <summary> /// 机构/运营商 价格 /// </summary> public double OrganPrice { get; set; } /// <summary> /// 库存 /// </summary> public int StackNumber { get; set; } /// <summary> /// 规格 /// </summary> public string Specifications { get; set; } /// <summary> /// 素材分类 /// </summary> public string CategoryID { get; set; } ///// <summary> ///// 分类标签 ///// </summary> //public string TagID //{ // get; // set; //} ///// <summary> ///// 是否参与报价 ///// </summary> //public string IsPrice //{ // get; // set; //} /// <summary> /// 详情 数据库对应CLOB数据类型 /// </summary> public string Details { get; set; } /// <summary> /// 简介 /// </summary> public string Introl { get; set; } /// <summary> /// 是否删除 /// </summary> [DBDefault] public string IsDelete { get; set; } /// <summary> /// 创建时间 /// </summary> [DBDefault] public DateTime? CreateTime { get; set; } /// <summary> /// 主图 /// </summary> [SolrField("ImagePath")] public string ImagePath { get; set; } /// <summary> /// 是否上下架,0下架,1上架 /// </summary> [DBDefault] public string IsSell { get; set; } /// <summary> /// 供应商,填充organ表的guid /// </summary> public string Supplier { get; set; } /// <summary> /// 品牌 /// </summary> public string BrandID { get; set; } /// <summary> /// 商品分类 /// </summary> public string ProductCategoryID { get; set; } /// <summary> /// 最后操作时间 /// </summary> [DBDefault] public DateTime? LastUpdateTime { get; set; } }
用法
gourpid 为分组 相同的则分成一组 type为他们之间的关系 如上 合并就是(ProductName:"" OR tagTile:"") AND (tagid:"" AND tagid:"") AND (tagid:"" OR tagid:"")
orderbyd则是 如传入的是字典 key :createTime value:desc 则是createtime降序排序 high为高亮显示字段 face为分组字段
进行suggest查询还需要配置一些东西
key 为查询参数 product为核心
olrconfig配置
<!--自定义-->
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">suggestion</str>
<str name="buildOnCommit">true</str>
<str name="spellcheckIndexDir">spellchecker</str>
</lst>
</searchComponent>
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">suggestion</str>
<!-- the indexed field to derive suggestions from -->
<float name="threshold">0.0001</float>
<str name="spellcheckIndexDir">spellchecker</str>
<str name="comparatorClass">freq</str>
<str name="buildOnOptimize">true</str>
<!--<str name="buildOnCommit">true</str>-->
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler"
name="/suggest">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">true</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
<queryConverter name="phraseQueryConverter" class="org.apache.solr.spelling.SpellingQueryConverter"/>
schema配置
<field name="suggestion" type="text_ws" indexed="true" stored="true" termVectors="true" multiValued="true" />
这个字段name映射上面的suggetion
配置<copyField source="categoryMenuName" dest="suggestion" /> 这个映射field 重新导入数据 重启tomcat
source为数据filed来源 支持写多个如再配置一个<copyField source="ProduectName" dest="suggestion" />
测试方式
我封装的ConfigHelp.SolrServerUrl地址:http://127.0.0.1:8080/solr/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!