Solr schema编写指导

本文涉及的产品
.cn 域名,1个 12个月
简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。

0. 亲,低级错误知多少

"" 写成了“”

true 写成了 ture

false写成了fasel

String 写成了 string

userId 写成了userid

user_id 写成了 user_Id

userId 写成了 user_Id

1. <uniqueKey>id</uniqueKey>

这个uniquekey 作用:当add doc的时候,配置了uniqueKey,后面的docuniqueKey相同的会覆盖之前的doc, 如果没有配置,那么将不会覆盖。update的时候,依据uniqueryKey信息的话, 所以有update还是建议配上uniqueKey,一来比较完整配置信息,二来数据排查也方便。 对应id这个域,必须 stored=trueindexed=true,类型建议使用long或者int,而不是string 如果有特殊场景需要按id排序的,就的使用TriedLongField,否则排序时候会按文本序排序。

2. <defaultSearchField>title</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 才有 pricisionSteppositionIncrementGapsortMissingLast="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 可以有 多个。通常情况下,使用mapkey也就唯一了,不会出现多个相同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工具查看下索引结构。 这样可能会发现一些问题。可能很多地方的结构可以尝试优化。


12 重要参考信息

 http://lucidworks.lucidimagination.com/display/solr/Solr+Field+Types

目录
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第一篇(SQL通用语法与分类)
MySQL数据库基础第一篇(SQL通用语法与分类)
|
5月前
|
存储 NoSQL JavaScript
MongoDB存储过程实战:聚合框架、脚本、最佳实践,一文全掌握!
【8月更文挑战第24天】MongoDB是一款备受欢迎的文档型NoSQL数据库,以灵活的数据模型和强大功能著称。尽管其存储过程支持不如传统关系型数据库,本文深入探讨了MongoDB在此方面的最佳实践。包括利用聚合框架处理复杂业务逻辑、封装业务逻辑提高复用性、运用JavaScript脚本实现类似存储过程的功能以及考虑集成其他工具提升数据处理能力。通过示例代码展示如何创建订单处理集合并定义验证规则,虽未直接实现存储过程,但有效地演示了如何借助JavaScript脚本处理业务逻辑,为开发者提供更多实用指导。
99 2
|
8月前
|
SQL XML JSON
Hive函数全解——思维导图 + 七种函数类型
Hive函数全解——思维导图 + 七种函数类型
170 2
Hive函数全解——思维导图 + 七种函数类型
|
7月前
|
SQL 存储 关系型数据库
SQL 入门教程:从基础到实践
**SQL 概述与基础操作** SQL,结构化查询语言,用于管理和操作数据库。核心概念包括数据库、表、行和列。基本语法涵盖DQL(查询)、DDL(定义)、DML(操纵)和DCL(控制)。关键操作: 1. **查询**:`SELECT`从表中获取数据。 2. **插入**:`INSERT INTO`添加新记录。 3. **更新**:`UPDATE`修改数据。 4. **删除**:`DELETE`移除记录。高级操作涉及条件、排序、分组和联合查询。实践操作需要数据库环境,如MySQL或在线编辑器。通过实例学习,如查询员工信息、部门员工及增删改数据,掌握SQL基础。
|
7月前
|
SQL 人工智能 关系型数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性
【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。
60 0
|
存储 NoSQL 关系型数据库
利用聚合概念指导MongoDB的Schema设计
利用聚合概念指导MongoDB的Schema设计
利用聚合概念指导MongoDB的Schema设计
|
关系型数据库 MySQL PHP
软件开发入门教程网 Search之MySQL 元数据
软件开发入门教程网 Search之MySQL 元数据
|
存储 Java 搜索推荐
记录一次solr自定义函数编写及使用的过程
solr基本查询已经可以满足大多数查询场景,不过作为一款成熟的搜索引擎solr也可以支持编写自定义函数udf并在查询中使用以应对各种复杂的查询场景。
848 1
记录一次solr自定义函数编写及使用的过程
|
SQL Java 关系型数据库
SQL入门第四篇——表的创建
表的语法格式 • 属于DDL语句:create drop alter • create table 表名( 字段名1 数据类型, 字段名2 数据类型. ...... );
|
SQL NoSQL 前端开发
前端培训-中级阶段(51)- nodeJS操作,MongoDB,文档CURD操作
前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。
138 0
前端培训-中级阶段(51)- nodeJS操作,MongoDB,文档CURD操作

热门文章

最新文章

相关实验场景

更多