设为首页 收藏本站
查看: 1137|回复: 0

[经验分享] solr学习中遇到的问题

[复制链接]

尚未签到

发表于 2018-11-1 12:42:07 | 显示全部楼层 |阅读模式

  •   使用中报错
    DSC0000.jpg

      解决办法:将data/index中的write.lock删除后重启tomcat然后重启solr就可以了
  •   如何更新单个文档字段
      假设你上传一个文档到一个系统中,另外你可以增加可访问这一文档的用户。你可能知道,在 solr4.0 之期,你打算更新文档的一个字段,你必须重新索引整个文档。solr4.0 允许你只更新单个字段,只要满足一些基本的要求。接下来让我们看看在 solr4.0 中这是怎么做的。
      怎么做
      要实现这个特性,现假设我们有以下这一索引结果(将以下这些实体写入 schema.xml 文件的 fields 节点下)

  •   

      

      额外需要做的是增加 _version_ 字段
  •   以上是 schema.xml 中所作的所有修改。另外假设我们有以下待索引的数据:
  •   
    1
      
    Sample file
      
    gro
      
    negativ
      

      

  • curl 'localhost:8983/solr/update?commit=true' -H 'Contenttype:  
    application/json' -d '[{"id":"1","user":{"add":"jack"}}]'
  • http://localhost:8983/solr/select?q=*:*&indent=true
  •   

      

      
    0
      
    0
      

      
    true
      
    *:*
      

      

      

      

      
    1
      
    Sample file
      

      
    gro
      
    negativ
      
    jack
      

      
    1411121765349851136
      

      

  • curl 'localhost:8983/solr/update?commit=true' -H 'Contenttype:  
    application/json' -d '[{"id":"1","file":{"set":"New file name"}}]'
  •   

      

      
    0
      
    1
      

      
    true
      
    *:*
      

      

      

      

      
    1
      
    New file name
      

      
    gro
      
    negativ
      
    jack
      

      
    1411121902871642112
      

      

      怎么工作的
      正如你所看到的那样,索引结构相当简单;我们有一个文档的标识、文档名称和可以访问这一文档的用户。正如你所看到的那样,这个索引中,所有的字段标识了存储(stored="true"),这个是局部更新功能所必须的。
      另一个需要做的事情是增加 _version_ 字段,在索引过程中不需要设置该字段的值,它是给 solr 内部使用的。
  三、
Solr整合中文分词mmseg4j
1. Summary
  本次使用的是Solr-4.7.0整合mmseg4j-1.9.1,下载mmseg4j-1.9.1.zip,把dist下面的jar文件拷贝到${solr-4.7.0}/WEB-INF/lib中,共三个jar文件

  •   mmseg4j-analysis-1.9.1.jar,
  •   mmseg4j-core-1.9.1.jar
  •   mmseg4j-solr-1.9.1.jar
2. 修改core中配置文件schema.xml
  在core的配置文件(schema.xml)中,添加使用中文分词器的fieldtype。例如:${Solr.home}/collection1/conf/schema.xml
  

  
   
  
        
  
   
  

  

  
   
  
        
  
   
  

  

  
   
  
      
  
        
  
   
  

  

  mmseg4j使用的是MMSeg算法,算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。
  上例中添加了三中fieldtype,他们主要区别是使用的模式不同:

  •   text_simple 使用Simple分词方法
  •   text_complex Complex 加了四个规则过虑
  •   text_maxword 默认。在complex基础上实现了最多分词(max-word)。“很好听” -> "很好|好听"; “中华人民共和国” -> "中华|华人|共和|国"; “中国人民银行” -> "中国|人民|银行"。
3. 源码修改
  运行服务器,检验中文分词。当输入‘中华人民共和国’并单机“Analyse Values”按钮时,出现如下错误:
DSC0001.jpg

  修改mmseg4j-analysis模块的源码文件:com.chenlb.mmseg4j.analysis.MMSegTokenizer增加如下一行代码:
    public void reset() throws IOException {  
        //lucene 4.0
  
        //org.apache.lucene.analysis.Tokenizer.setReader(Reader)
  
        //setReader 自动被调用, input 自动被设置。
  
+       super.reset();
  
        mmSeg.reset(input);
  
    }
  保存后,重新编译打包:
mvn clean package -DskipTests  成功运行后如下:
DSC0002.jpg

  4 solr hard commit做的事情
  1、生成一个新的tlog文件,删除旧的tlog。
  2、把内存中的索引文件fsync到磁盘,并创建一个index descriptor。这里比较耗费机器资源。
  这样即使jvm崩溃或者宕机,也不影响这部分索引。
  3、使得索引在searcher中可见。但是也需要重新打开searcher才行。
  soft commit做的事情
  1、把内存文件fsync到磁盘,但不创建index descriptor。
  也就是说原索引和现在的索引还互不感知,所以如果jvm崩溃,那这部分索引就没了。
  2、可以重新打开searcher,使得新的索引可以被查找到。
  在solr中,查询被一个叫做 searcher的组件处理。在solr中,任何时候只有一个"active"的searcher。对于所有查询请求handler的所有的查询组件都是针对active searcher来执行查询的。
  active searcher拥有一个底层lucene索引的只读快照视图。它遵循如下规则:如果你添加一个新文档到solr,它在从当前searcher的搜索结果中是不可见的。这引发了问题:在搜索结果中新文档如何变得可见?答案是关闭当前searcher并且打开一个新的包含更新索引只读视图的searcher。这就是提交(commit)文档到solr的意义
  那么commit和设置true的区别是一个关闭打开searcher?一个使用了快照视图?
  这个应该是设置在commit的时候是否打开新的searcher
  频繁commit肯定不好,新开searcher是有代价的
  还涉及到相关缓存的失效和重新预热等开销



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629396-1-1.html 上篇帖子: 玩转大数据系列之Apache Pig如何与Apache Solr集成(二) 下篇帖子: Hermes与开源的Solr、ElasticSearch的不同
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表