文档、字段和模式设计概述

Solr 的基本前提非常简单。 你给它很多信息,过后你可以向它提问并找到你想要的信息的片段。 你提供所有信息的部分称为 建索引更新索引。 当你向其提问时,称为 查询

一种帮助你理解 Solr 如何运行的方式是把它看作一本菜谱的活页书。 每次你向里面添加一个菜谱时,你会更新后面的索引。 你在索引中列出你刚刚添加菜谱的每个成分和所在的页数。假设你添加了100个菜谱。 使用后面的索引,你可以快速找到所有使用了鹰嘴豆、西兰花或者咖啡为成分的菜谱。 使用索引比一个一个查看菜谱要快很多。想象一下一本有一千或者一百万种菜谱的书。

Solr 让你可以构建一个带有多个不同字段或类型的实体的索引。 上面的例子展示了如何构建仅有一个字段 ingredients 的索引。 你可以在菜谱索引中添加其他字段, 比如说你可以添加一个叫做口味的字段,像 亚洲口味、印第安口味、墨西哥口味等, 同时你可以有一个准备时间的索引字段。 Solr就能够回答像 “有什么菜谱是卡真口味,使用血橙作为成分,准备时间少于 30 分钟?” 这样的问题。

模式(schema) 就是你告诉 Solr 它应该如何从输入文档构建索引。

Solr 如何看待世界

Solr 的基本信息单元是一个 文档(document),它是一系列描述某些东西的数据的集合。 一个菜谱文档将会包含成分、操作步骤、准备时间、制作时间、需要的工具等等。 有关个人信息的文档可能包含姓名、档案、喜欢的色彩、鞋号。 有关书本的稳定可能包含标题、作者、出版年份、页数等等。

在 Solr 的世界中,文档是由 字段(fields) 组成,字段是更特定的信息的片段。 鞋号可能是一个字段。姓和名可能分别是字段。

字段可包含不同类型的数据。 例如名字字段是文本(字符数据)类型。 鞋号字段可能是浮点数,这样它可以包含像 6 或者 9.5 这样的值。 很显然,字段的定义是很灵活的(例如你可以将鞋号的字段定义为文本字段而不是浮点数)。 但如果你正确地定义字段的话,Solr 将能更好地解释它们, 且你的用户在查询时也能够得到更好的结果。

你可以通过 字段类型(field type) 来告诉 Solr 字段所包含的数据的类型。 字段类型告诉 Solr 如何解释字段以及它可以如何查询。

当你添加文档时,Solr 会根据文档的字段取出信息并将该信息添加到一个索引中。 当你进行查询时,Solr 可以快速的检索该索引并返回匹配的文档。

字段分析

字段分析(field analysis) 会告诉 Solr 在构建索引时如何处理到来的数据。 该过程更确切的名字可能是 处理 或者甚至 消化,但官方的名称是 分析

以个人文档中的档案字段为例。档案中的每一个词都必须被索引, 这样你可以快速找到那些档案中有番茄酱、蜻蜓或密码学的人。

但档案中可能包含有大量你不关心也不希望放到索引中的单词,如 “the”、”a”、”to” 等等。 此外,假设包含单词番茄酱(Ketchup)由于在句首 K 是大写的。 当用户查询 “ketchup” 时,你希望 Solr 能够返回这个人即使他的档案中保护的是大写的词。

这些问题的解决方案就是字段分析。 对档案字段,你可以告诉 Solr 如何将档案内容拆分为单词。 你可以告诉 Solr 你希望所有的单词都小写,并且告诉 Solr 删除所有音标字符。

字段分析是字段类型中的一个重要部分。 理解分析器、分词器和过滤器 小节有字段分析的详细描述。