Solr schema怎么编写

35次阅读
没有评论

共计 2564 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要介绍“Solr schema 怎么编写”,在日常操作中,相信很多人在 Solr schema 怎么编写问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Solr schema 怎么编写”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1.uniquekey 作用:当 add doc 的时候,配置了 uniqueKey,后面的 doc 中 uniqueKey 相同的会覆盖之前的 doc,

如果没有配置,那么将不会覆盖。update 的时候,依据 uniqueryKey 信息的话,

所以有 update 还是建议配上 uniqueKey,一来比较完整配置信息,二来数据排查也方便。

对应 id 这个域,必须 stored=true、indexed=true,类型建议使用 long 或者 int,而不是 string

如果有特殊场景需要按 id 排序的,就的使用 TriedLongField,否则排序时候会按文本序排序。

2. defaultSearchField, 故名思议就是默认查询的时候,查什么域。这句的用法体现在:

queryStr= content:abc 123,  等价 queryStr= content:abc title:123

queryStr= 123 等价 queryStr= title:123

也就是说等查询的时候,没有指定查那个域,默认就对应 defaultSearchField 了。

既然是 defaultSearchField,那么这个域 indexed=true 是必须的

注意区分 content:abc 123 与 content:”abc 123”以及 content:(abc 123)

3. 所有 int sint tint long slong tlong float sfloat tfloat double sdouble tdouble

都不支持分词,也无需分词。没有 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 过程,只是在命中返回的时候

返回的是 list or 单个对象。

深入提示,multiValued=”true”在建索引的时候,实际上开辟了一个新的域,允许域名相同的域多次出现。

查询的时候会查询所有域名相同的域,这样导致检索性能会有一定影响,特别是域名膨胀之后,影响非常明显。

8. 特殊分词

对应提出#;:等分词,其实建议统一转化为空格分词,这是系统原生的分词,并且是基于编译器层的分词,性能更好。

没有必要为了一个 #,重新定制一份代码,部署起来。

9. 排序、区间、一般查询

排序的应该是数字类型,建议使用 trie 类型,老的 sortable 也是支持的

区间的也应该是数字类型的,建议使用 tried 类型

一般查询的多个数字组合的话,建议将数字字符化,然后空格分开,目前不支持数字类型的数组

10. date tdate 等类型

在配置 data tdate 等类型的时候,需要注意时间格式。

另外,不推荐直接保存,而是保存差值后的 int 类型等。

由于 data 精度控制不同,将使得所用 data 域的 term 成线性增长,这是相当恐怕的事情。

这个长尾将消耗非常大的内存、空间资源。

在索引中 term 线性的增长是相当恐怖的事情。对长尾的处理目前还没有特殊优化。

通用在索引中 term 聚集性的增长也是相当恐怖的事情,对长链处理目前也没有特殊优化。

11. 高级活

自我校验 schema 质量。

当 schema 配置完毕了,可以采取 terminatorquickstart 测试一下,然后 luke 工具查看下索引结构。

这样可能会发现一些问题。可能很多地方的结构可以尝试优化。

到此,关于“Solr schema 怎么编写”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计2564字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)