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

[经验分享] Solr schema编写指导

[复制链接]

尚未签到

发表于 2018-11-2 06:49:55 | 显示全部楼层 |阅读模式
  0.亲,低级错误知多少
""    写成了“”  

  
true    写成了 ture
  

  
false写成了fasel
  

  
String 写成了 string
  

  
userId 写成了userid
  

  
user_id 写成了 user_Id
  

  
userId 写成了 user_Id
  1.
这个uniquekey 作用:当add doc的时候,配置了uniqueKey,后面的doc中uniqueKey相同的会覆盖之前的doc,  
如果没有配置,那么将不会覆盖。update的时候,依据uniqueryKey信息的话,
  
所以有update还是建议配上uniqueKey,一来比较完整配置信息,二来数据排查也方便。
  
对应id这个域,必须 stored=true、indexed=true,类型建议使用long或者int,而不是string
  
如果有特殊场景需要按id排序的,就的使用TriedLongField,否则排序时候会按文本序排序。
  2.
  titleidu
故名思议就是默认查询的时候,查什么域。这句的用法体现在:
  
queryStr= content:abc 123,  等价 queryStr= content:abc>
  
queryStr= 123 等价 queryStr=>  
也就是说等查询的时候,没有指定查那个域,默认就对应defaultSearchField了。
  
既然是defaultSearchField,那么这个域indexed=true 是必须的
  
注意区分 content:abc 123 与content:"abc 123" 以及 content:(abc 123)
  3.所有intsinttintlongslongtlongfloatsfloattfloatdouble
  sdoubletdouble
都不支持分词,也无需分词。没有sshort tshort,只有short。因为这些基本类型就一个值,无需什么分词。  
对与int long fload Field,不应该出现positionincrmentGap=100
  
对与tint tlong tdoube 才有 pricisionStep、positionIncrementGap、sortMissingLast="true"属性。
  4.配置分词
所有TextField才有机会分词所有TextField才有机会执行facet所有TextField配置的omitTermFreqAndPositions="true"才会起效果,排序中频率位置信息没了  5.omitNorms=”true”这个参数影响域的得分,去掉之后,使得长短域相同词得分一致。按照香浓原理,
某个词出现在更长的文本中,或者出现次数越多,信息值更低。对应如果omitNorms=false,那么下面淘宝出现doc1淘宝杭州出现doc2淘宝杭州网络有限公司,命中淘宝的时候,doc1得分高于doc2注意:只有有一个域的omitNorms="false",等价所有域都保留了omitNorms这个位置,尽管omitNorms内容是空,所有,omitNorms在所有域都omitNorms=“true”的时候,才对索引有帮助。  6.required=”true”
这个属性是说,一旦scham中该域启用required=“true”,那么建索引的时候,这个域时不能为空的,这个doc认为不完整。当前走dump中心,会对null的赋值为"",也就不会出现没有值的情况。但是schema中还是应该突出下,如果逻辑上有需要确保某些字段必须有  7.multiValued=”true”
这个配置不是说某个域中term是单一or多个的意义。即使mulitValued=false,一个text域同时可以是很长的一段文本,也就是很多term的情况。multiValued="true"真正含义是:在传入doc建索引的时候,当一个域是mulitValued="true",那么可以向该域继续add内容。等价在一个doc中,相同域名的key:value可以有多个。通常情况下,使用map,key也就唯一了,不会出现多个相同key,不同value的情况。另外,配置了mulitValued="true",在命中返回文档的时候,返回的是list,而不是单个对象。在终搜目前的建索引集中下,这个multiValued配与不配已经没有任何作用影响dump过程,只是在命中返回的时候返回的是listor单个对象。深入提示,multiValued="true"在建索引的时候,实际上开辟了一个新的域,允许域名相同的域多次出现。查询的时候会查询所有域名相同的域,这样导致检索性能会有一定影响,特别是域名膨胀之后,影响非常明显。  8.特殊分词
对应提出#;:等分词,其实建议统一转化为空格分词,这是系统原生的分词,并且是基于编译器层的分词,性能更好。没有必要为了一个#,重新定制一份代码,部署起来。  9.排序、区间、一般查询
排序的应该是数字类型,建议使用trie类型,老的sortable也是支持的区间的也应该是数字类型的,建议使用tried类型一般查询的多个数字组合的话,建议将数字字符化,然后空格分开,目前不支持数字类型的数组  10.datetdate等类型
在配置datatdate等类型的时候,需要注意时间格式。另外,不推荐直接保存,而是保存差值后的int类型等。由于data精度控制不同,将使得所用data域的term成线性增长,这是相当恐怕的事情。这个长尾将消耗非常大的内存、空间资源。在索引中term线性的增长是相当恐怖的事情。对长尾的处理目前还没有特殊优化。通用在索引中term聚集性的增长也是相当恐怖的事情,对长链处理目前也没有特殊优化。  11.高级活
自我校验schema质量。当schema配置完毕了,可以采取terminatorquickstart测试一下,然后luke工具查看下索引结构。这样可能会发现一些问题。可能很多地方的结构可以尝试优化。


运维网声明 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-629531-1-1.html 上篇帖子: apache solr关键字高亮(highlight) 下篇帖子: eclipse+tomcat搭建solr
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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