solr长文本检索
2018-04-17 本文已影响11人
nickbi
在我们使用solr的时候,我们会遇到关键词检索跟长文本检索等需求,在工作中很多时候接触的是关键词所以没怎么去关注长文本的检索,最近在项目中遇到了长文本的检索,所以在此写下自己的总结,希望对遇到相应问题的朋友一个参考.
1.先上官方解决方法
官方地址,solr官方为我们提供了分析器的配置方法,大家可以点击链接,查看更加详细的文档。
- 官方推荐在schema.xml中使用添加field type来解决长文本检索的问题,在长文本中,我们是无法通过某个关键词去检索到相对于的文本的,所有通过添加相对于的field type来对长文本进行分析、分词形成一个关键词数组,这时我们再通过关键词就可以检索到相对于的文本了。
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
# 然后在指定field时,再指定定义好的field type
<field name="title" type="text_general" indexed="true" stored="true"/>
<field name="name" type="text_general" indexed="true" stored="true"/>
其实在solr中已经存在text_general这个filed type大家可以在此基础上进行增删