准备工作
在上面的基础上我又创建了一个实例 collection2,映射的另一个products 表,这个表字段多一些,怎么配置就不说了,参考上一篇 全文搜索引擎 solr------(一)solr8 最新版本安装配置
添加的域如下:
很显然这是 managed-schema 文件
<field name="p_id" type="string" indexed="true" stored="true" />
<field name="p_name" type="string" indexed="true" stored="true" />
<field name="p_catalog" type="string" indexed="true" stored="true" />
<field name="p_catalog_name" type="solr_cnAnalyzer" indexed="true" stored="true" />
<field name="p_price" type="string" indexed="true" stored="true" />
<field name="p_description" type="string" indexed="true" stored="true" />
<field name="p_picture" type="string" indexed="true" stored="true" />
<field name="p_number" type="string" indexed="true" stored="true" />
<field name="p_release_time" type="string" indexed="true" stored="true" />
我们现在想在p_name 建立索引, 并且分词
solr8 自带分词工具
找到这个jar
复制到 webapp 路径的lib 下
接下来配置 文件添加
<!-- ChineseAnalyzer 自带的中文分词器 -->
<fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
这样就配置好了 类型名称是 solr_cnAnalyzer 的分词器。
外部分词器配置
先吐槽一下: IKAnalyzer2012FF_u1.jar 和 IKAnalyzer 3.2.8 这样的都不行,各种报错让你怀疑人生,就是因为版本太旧了,我们用这个
下载地址:6.5高版本分词器下载
解压后目录
包括两个jar 包和三个文件。
jar 包放到这个位置: solr-8.2.0\server\solr-webapp\webapp\WEB-INF\lib
文件放到这里:solr-8.2.0\server\solr-webapp\webapp\WEB-INF\classes
如果没有classes目录就建一个。
接下来配置 文件添加
<field name="p_textIk" type="text_ik" indexed="true" stored="true" />
<!-- IKAnalyzer-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
说明下: solr.TextField 是使用分词的,solr.StrField 不适用;
这样就配置好了 p_textIk 分词器,另外,solr 中也有默认的分词器 :text_ws,不过不支持中文。
修改分词的域类型
在 managed-schema 修改配置,注意这两个地方,上边我们定义了两个分词器,然后把 p_name 和 p_catalog_name 的 type 类型改为刚才定义的分词器类型。
演示
输入我是中国人,选择我们的分词字段 p_textIk 和 solr_cnAnalyzer,可以看到分好了,两个分词器都好了。
现在我们导入数据,按照索引来搜索下,
导入之后的数据:
先按照 p_name 这个域来搜索,
注意 1 和 2 处的设置, 1 的地方指明了搜索关键字,2 指明索引名称。
然后 按照 p_catalog_name 搜索,