学习搭建solr有感(第三期)

第三期也出来了……

这次的问题是将solr整合到项目当中出现的问题。
首先,导包!这个我一定要强调一下!
如果,通过pom的方式导包失败,那么请尝试一下下面这个方式

        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.7.1</version>
         <scope>system</scope>
		 <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/solr-solrj-4.7.1.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-core</artifactId>
        <version>4.7.1</version>
         <scope>system</scope>
		 <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/solr-core-4.7.1.jar</systemPath>
    </dependency>

请注意一点,在systempath这地方填写的地址是你的solr依赖存放的绝对路径。
然后,在使用的时候它也不会立刻出现,还需要确认一下,我就是因为没有进行导入确认,结果白白浪费了一个上午的时间。
当你确认过后,它自然会出现在你maven目录里面了
接下来是第二点,也是比较关键的一点,那就是代码的编写。
在这个地方,我碰到了一些疑惑。是关于schema.xml的,在最开始关注的那个攻略当中,我并没有留心它对于solr的构筑方式。
我十分单纯的认为引入jar包,就可以在项目当中同时构筑一个服务器……结果,在简单的查询之后,我发现……事实并不是这样。
很多solr跟java项目整合的攻略当中,他们更多的是告诉你如何写代码,却没有跟你说这个代码是运行在什么地方,需要跟什么配合
实际上,这些代码都是建立在你已经成功构筑好solr服务器的基础之上的……在我前两篇有感中一直提到的那个攻略中,它的java代码里面出现了一个让我陌生又熟悉的单词
“product_keywords”
这个单词在全文中只出现过4次,而前三次都是在搭建solr服务器的时候才出现,而现在又一次出现在了java代码中。
我本着这到底是啥玩意,为啥要这么写的态度。去百度了……
而百度的结果就是,哪怕你已经引入了jar包,如果没有搭建好solr的服务器,那也是白费劲……
就这样,我又掉头去研究schema.xml文档的构成以及如何建立自己的字段。
这里我推荐两篇文章,大家可以看看

https://blog.csdn.net/xiaoyu411502/article/details/44835119
https://blog.csdn.net/liuweitoo/article/details/8137124

一篇是将solr部署的,但没有之前推荐的那个手把手写的详细(并非图文并茂,而是图片都碎了……)
具体看下来才发现它的solr好像是搭建在linux上面的
另外一边则是我主要看的schema.xml的相关介绍。
在solr部署的文章当中,我找到了最简略的schema.xml文件内容,而不是solr压缩包里面那个又有注释又有外国分词器的文档
而在这个地方我又碰到了新的坑
各位看看我下面的两段代码

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
 <fields>
	<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
	<field name="loginname" type="long" indexed="true" stored="true"  /> 
	<field name="nickname" type="text_ik" indexed="true" stored="true"  /> 
	<field name="registerdate" type="date" indexed="true" stored="true"  /> 	
	<field name="name" type="text_ik" indexed="true" stored="true"  /> 
	<field name="releaseowner" type="text_ik" indexed="true" stored="true" /> 
	<field name="information1" type="text_ik" indexed="true" stored="true"  /> 
	<field name="addrprovince" type="text_ik" indexed="true" stored="true"/> 
	<field name="addrcity" type="text_ik" indexed="true" stored="true"  /> 
	<field name="addrcounty" type="text_ik" indexed="true" stored="true"  /> 
	<field name="text" type="text_ik" indexed="true" stored="false" multiValued="true"/>
	<copyField source="loginname" dest="text"/>
	<copyField source="nickname" dest="text" />
	<copyField source="registerdate" dest="text" />
	<copyField source="name" dest="text"/>
	<copyField source="releaseowner" dest="text" />
	<copyField source="information1" dest="text" />
	<copyField source="addrprovince" dest="text"/>
	<copyField source="addrcity" dest="text" />
	<copyField source="addrcounty" dest="text" />
	<field name="_version_" type="long" indexed="true" stored="true"/>
 </fields>
 <uniqueKey>id</uniqueKey>
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="text" class="solr.TextField" />
	<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
 </types>
</schema>

这段是能够进行全文搜索的代码

<schema name="example" version="1.5">
	<fields>
		<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
		<field name="loginname" type="long" indexed="true" stored="true"  /> 
		<field name="nickname" type="text_ik" indexed="true" stored="true"  /> 
		<field name="registerdate" type="date" indexed="true" stored="true"  /> 	
		<field name="name" type="text_ik" indexed="true" stored="true"  /> 
		<field name="releaseowner" type="text_ik" indexed="true" stored="true" /> 
		<field name="information1" type="text_ik" indexed="true" stored="true"  /> 
		<field name="addrprovince" type="text_ik" indexed="true" stored="true"/> 
		<field name="addrcity" type="text_ik" indexed="true" stored="true"  /> 
		<field name="addrcounty" type="text_ik" indexed="true" stored="true"  /> 
		<field name="_version_" type="long" indexed="true" stored="true"/>
		<field name="text" type="text_ik" indexed="true" stored="false" multiValued="true"/>
		<copyfield source="name" dest="text"/>
	<copyfield source="releaseowner" dest="text"/>
	<copyfield source="nickname" dest="text"/>
	<copyfield source="information1" dest="text"/>
	<copyfield source="addrprovince" dest="text"/>
	<copyfield source="addrcity" dest="text"/>
	<copyfield source="addrcounty" dest="text"/>
	</fields>
	<uniqueKey>id</uniqueKey>
	<types>
	    <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
		<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
		<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
		<fieldType name="text" class="solr.TextField" />
		<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
		<fieldType name="text_ik" class="solr.TextField">
			<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
		</fieldType>
	</types>
</schema>

这段是不能进行全文搜索的代码
两段代码我进行了简单的比较,并没有发现什么不对的地方,也可能是copyfield字段写的不够多,但上下两端代码都可以正常启动solr服务器。
这里我还有说一个坑。
全文搜索的字段轻易不要改动,不然就会发生我上面的事情,一段可以全文搜索,一段不能全文搜索。
这里再提一篇文章,它说了全文搜索这个bug出现的时候,应该如何解决

https://www.cnblogs.com/fengzhanfei/p/6372591.html

要么你就把全文搜索的名字定义成“text”不变,不然就把solrconfig.xml里面所有涉及到全文搜索的字段都改成你想要的字段……
哪个简单一些,不言而喻……
今天暂时就这些东西,我还要继续去将solr跟java项目进行整合,目前已经完成十分之一……需要加快进度了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值