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

目录
相关文章
|
11月前
|
SQL 关系型数据库 MySQL
GO web 开发 实战三,数据库预处理
GO web 开发 实战三,数据库预处理
|
2月前
|
SQL 存储 数据管理
掌握SQL Server Integration Services (SSIS)精髓:从零开始构建自动化数据提取、转换与加载(ETL)流程,实现高效数据迁移与集成——轻松上手SSIS打造企业级数据管理利器
【8月更文挑战第31天】SQL Server Integration Services (SSIS) 是 Microsoft 提供的企业级数据集成平台,用于高效完成数据提取、转换和加载(ETL)任务。本文通过简单示例介绍 SSIS 的基本使用方法,包括创建数据包、配置数据源与目标以及自动化执行流程。首先确保安装了 SQL Server Data Tools (SSDT),然后在 Visual Studio 中创建新的 SSIS 项目,通过添加控制流和数据流组件,实现从 CSV 文件到 SQL Server 数据库的数据迁移。
49 0
|
4月前
|
SQL 人工智能 关系型数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性
【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。
38 0
|
12月前
|
SQL 分布式计算 Java
浅析 hive udaf 的正确编写方式- 论姿势的重要性-系列四-如何直接访问metastore service(附源码)
浅析 hive udaf 的正确编写方式- 论姿势的重要性-系列四-如何直接访问metastore service(附源码)
|
12月前
|
SQL 存储 Java
浅析 hive udaf 的正确编写方式- 论姿势的重要性
浅析 hive udaf 的正确编写方式- 论姿势的重要性
|
存储 关系型数据库 MySQL
第六章 schema设计与管理
第六章 schema设计与管理
|
SQL 数据挖掘
【数据开发系列】 - 数据开发常用SQL汇总
数据开发或数据分析同学常用的很多SQL并不一定会记全,但是必须得记住。熟记心里提升工作效率!
567 0
|
SQL 移动开发 并行计算
不需要编写代码,也能成为Hive SQL面试高手?ChatGPT告诉你...
当你面对 Hive SQL 面试时,不仅需要掌握 SQL 语言的基本知识,还需要熟练掌握 Hive SQL 的一些高级特性,比如窗口函数、分区等等。对于初学者而言,写出高效的 Hive SQL 代码往往是一件困难的事情,而这恰恰是面试官最为看重的。但是,你不必担心!现在,有一种神奇的工具——ChatGPT,可以帮助你快速生成 Hive SQL 代码,解决你在面试中遇到的各种难题。本文将会介绍如何使用 ChatGPT 生成 Hive SQL 代码,让你在面试中轻松成为 Hive SQL 面试高手,无需编写代码也能毫不费力地完成面试题。 让我们一起来看看吧!
|
关系型数据库 MySQL PHP
软件开发入门教程网 Search之MySQL 元数据
软件开发入门教程网 Search之MySQL 元数据
|
SQL 监控 HIVE
网站流量日志分析--统计分析--sql 补充扩展--如何编写 hive sql|学习笔记
快速学习网站流量日志分析--统计分析--sql 补充扩展--如何编写 hive sql
109 0