Solr开发

本文章仅供参考,没有提供完整的教程,着重点在搭建过程中可能遇到的各类问题,详细的教程网上有很多,可以多看看。
好文参考:Solr7.4.0应用部署Demo

服务部署

复制conf文件

修改data-config.xml文件

分为两种类型:

数据库

数据库的配置相对简单,可以同时配置多张表,写在document字段下即可,此处存在一个问题,id字段一般为uniqueKey,多张表的id字段可能出现重复的情况,可以如下配置id字段,在后面拼接表名,解决重名的问题。

<?xml version="1.0" encoding="utf-8"?>
<dataConfig>
    <!--dataSource标签配置数据库相关的信息-->
    <dataSource name = "db_source" type="JdbcDataSource"   
    driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//127.0.0.1:1521/orcl"   
    user="11" password="11"/>  
    <document>
        <!--以下的dataSource指定上边的dataSource标签中的name属性,并不是必须要加的,除非你配置了多个数据源,这里我是一个数据源,所以,下边的dataSource属性是可以去掉的,另外,pk属性指定的是manage-schema文件中的uniqueKey标签中的值,即主键-->
        <entity name="tableName" transformer="ClobTransformer" dataSource="db_source"  PK="id"
        query="SELECT concat(id,'_tableName') id,title,author,CONTENT FROM tableName">
        <!--以下的字段column属性对应数据库中字段名称,name是对应solr这边配置的名称,注意id,默认名称即为id,表示solr这边一条数据的主键,以下三个是要在solr这边中建立索引的字段,比如数据库中有10个字段,我只需要为3个字段建立索引关系,那这里就写3个就好了
          如果数据库中的主键不是id,比如是objectId,那上边的query需要为它起一个别名为id即可-->
            <field column="id"  name="id" />
            <field column="title"  name="title" />
            <field column="author" name="author" />
            <field column="CONTENT" name="content" clob="true"/>
        </entity>
    </document>
</dataConfig>
本地文件

对富文本格式进行递归解析(设置recursivetrue),使用TikaEntityProcessor对文件进行解析,注意需要复制一堆架包到lib目录下,可以参考相关教程,一般来说在solr-7.5.0\contribsolr-7.5.0\dist目录下,主要添加了分词器架包以及tika解析文件的各类架包

<?xml version="1.0" encoding="utf-8"?>
<dataConfig>
    <dataSource type="BinFileDataSource"/>
    <document>
    <!-- 使用tika索引文件
        processor:FileListEntityProcessor
        dataSource:设置为空
        recursive:是否递归索引文件夹-->
        <entity name="file" processor="FileListEntityProcessor" dataSource="null" baseDir="fill your own file path here" fileName=".*.(doc)|(pdf)|(txt)|(docx)" rootEntity="false" recursive="true">
            <field column="file" name="fileName" />
            <field column="fileAbsolutePath" name="fileAbsolutePath" />
            <field column="fileDir" name="fileDir" />
            <entity name="files" processor="TikaEntityProcessor" url="${file.fileAbsolutePath}" format="text" onError="skip">
                <field column="Author" name="author" meta="true" />
                <field column="title" name="title" meta="true" />
                <field column="dc:format" name="format" meta="true" />
                <field column="text" name="text" />
            </entity>
        </entity>
    </document>
</dataConfig>
<field name="fileName" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
<field name="fileAbsolutePath" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="fileDir" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="author" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="title" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="format" type="text_ik" indexed="true" stored="true" multiValued="false"/>
<field name="text" type="text_ik" indexed="true" stored="true" multiValued="false"/>

<!--  uniqueKey需要注意,后面文件导入的时候可能出现问题-->
<uniqueKey>fileName</uniqueKey>

<!-- The StrField type is not analyzed, but indexed/stored verbatim. -->
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="plong" class="solr.LongPointField" docValues="true"/>
<!-- solr自带中文分词器-->
<fieldType name="text_smartcn" 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>

<!-- ik 中文分词器 -->
<fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

文件上传

使用update/extract方法上传富文本

可能存在的问题

  1. Spring data solr Document is missing mandatory uniqueKey field:报错,可能是字段名称没有匹配上,需要仔细检查xml文件配置,同时需要注意为什么网上教程的字段名称全部都是小写,而不是常见的驼峰命名法?因为只要存在大写,就可能匹配失败,注意solrconfig.xml,注意lowernames属性,所有的上传field都会被转成小写进行匹配。

    <requestHandler name="/update/extract"
                      startup="lazy"
                      class="solr.extraction.ExtractingRequestHandler" >
        <lst name="defaults">
          <str name="lowernames">true</str>
          <str name="uprefix">ignored_</str>
    
          <!-- capture link hrefs but ignore div attributes -->
          <str name="captureAttr">true</str>
          <str name="fmap.a">links</str>
          <str name="fmap.div">ignored_</str>
        </lst>
    </requestHandler>
    
  2. 查询的多字段高亮,需要注意QueryFilter Query,可以参考这篇文章搜索引擎solr系列---高亮配置及问题总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容