文档、字段和模式设计

Solr 的基本前提很简单。您向它提供大量信息,然后稍后您可以向它提问并找到所需的信息。

您输入所有信息的部分称为索引更新。当您提问时,称为查询

了解 Solr 工作原理的一种方法是将其视为一本松散的菜谱书。每次向书中添加菜谱时,您都会更新封底的索引。您会列出每种配料以及您刚添加的菜谱的页码。假设您添加了一百个菜谱。使用索引,您可以非常快速地找到所有使用鹰嘴豆、朝鲜蓟或咖啡作为配料的菜谱。使用索引比逐个查看每个菜谱要快得多。想象一下一本包含一千个菜谱或一百万个菜谱的书。

Solr 允许您使用许多不同的字段或条目类型构建索引。上面的示例展示了如何使用一个字段(ingredients)构建索引。您可以在索引中为菜谱的烹饪风格(如 AsianCajunvegan)添加其他字段,还可以为准备时间添加一个索引字段。Solr 可以回答诸如“有哪些血橙作为配料且准备时间少于 30 分钟的 Cajun 风格菜谱?”这样的问题。

架构是您告诉 Solr 如何从输入文档构建索引的地方。

Solr 如何看待世界

Solr 的基本信息单元是文档,它是一组描述某事项的数据。菜谱文档将包含配料、说明、准备时间、烹饪时间、所需的工具等。例如,关于一个人的文档可能包含该人的姓名、传记、最喜欢的颜色和鞋码。关于一本书的文档可能包含书名、作者、出版年份、页数等。

在 Solr 宇宙中,文档由字段组成,这些字段是更具体的信息。鞋码可以是一个字段。名字和姓氏可以是字段。

字段可以包含不同类型的数据。例如,姓名字段是文本(字符数据)。鞋码字段可以是浮点数,以便它可以包含 6 和 9.5 等值。显然,字段的定义是灵活的(例如,您可以将鞋码字段定义为文本字段,而不是浮点数),但如果您正确定义了字段,Solr 将能够正确解释它们,并且您的用户在执行查询时将获得更好的结果。

您可以通过指定字段的字段类型来告诉 Solr 字段包含哪种类型的数据。字段类型告诉 Solr 如何解释字段以及如何对其进行查询。

当您添加文档时,Solr 会获取文档字段中的信息并将该信息添加到索引中。当您执行查询时,Solr 可以快速查询索引并返回匹配的文档。

字段分析

字段分析告诉 Solr 在构建索引时如何处理传入的数据。这个过程更准确的名称应该是处理甚至消化,但官方名称是分析

例如,考虑个人文档中的传记字段。传记的每个单词都必须编入索引,以便您可以快速找到与番茄酱、蜻蜓或密码学有任何关系的人。

然而,传记可能包含许多您不关心且不希望堵塞索引的单词,例如“the”、“a”、“to”等。此外,假设传记中包含单词“Ketchup”,它在句首大写。如果用户查询“ketchup”,您希望 Solr 告诉您这个人,即使传记中包含大写单词。

这两个问题的解决方案都是字段分析。对于传记字段,您可以告诉 Solr 如何将传记分解成单词。您可以告诉 Solr 您希望将所有单词都变为小写,并且您可以告诉 Solr 删除重音符号。

字段分析是字段类型的重要组成部分。Solr 中的文档分析是对字段分析的详细描述。

Solr 的架构文件

Solr 在架构文件中存储有关它预期理解的字段类型和字段的详细信息。此文件名为 managed-schema.xmlschema.xml。区别取决于您计划如何管理安装中的 Solr 架构:以编程方式或通过手工编辑。

关于架构的一个重要事实是它是一个 Solr 概念。索引中的实际数据存储在 Lucene 中,而 Lucene 没有架构的概念。这意味着对架构文件所做的更改不会对已存储在索引中的数据产生任何影响。事实上,在不重新索引数据的情况下更改架构会导致索引出现严重问题,以至于唯一的解决方案是完全重新索引您的数据。

尝试考虑您计划编制索引的数据是一种好习惯:它是什么类型的数据?您希望如何搜索它?文档中的字段将如何显示给用户?

如果您还不确定,请计划进行一些测试索引运行,以查看文档中的数据如何使用默认设置进行编制索引。在您的实施计划中留出一些时间进行迭代并从小处着手。在为所有文档编制索引之前,您能够定义的架构越多,您的用户获得成功的搜索应用程序的机会就越大。

有关架构的更多信息,请参阅部分架构元素