文档、字段和模式设计
Solr 的基本前提很简单。您给它大量信息,然后您可以在稍后提出问题并找到您想要的信息。
您输入所有信息的部分称为索引或更新。当您提出问题时,它被称为查询。
理解 Solr 工作原理的一种方法是将其想象成一本活页食谱书。每次您向书中添加食谱时,都会更新后面的索引。您会列出每种配料以及您刚添加的食谱的页码。假设您添加了一百个食谱。使用索引,您可以非常快速地找到所有使用鹰嘴豆、朝鲜蓟或咖啡作为配料的食谱。使用索引比逐个查看每个食谱快得多。想象一本有一千个食谱或一百万个食谱的书。
Solr 允许您使用许多不同的字段或条目类型构建索引。上面的示例演示了如何仅使用一个字段 ingredients
构建索引。您可以在索引中为食谱的烹饪风格添加其他字段,如 Asian
、Cajun
或 vegan
,并且可以为准备时间添加一个索引字段。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.xml
或 schema.xml
。区别在于您计划如何在安装中管理 Solr 的模式:以编程方式或手动编辑。
关于模式的一个重要事实是,它是一个 Solr 的概念。索引中的实际数据存储在 Lucene 中,而 Lucene 没有模式的概念。这意味着更改模式文件不会对已存储在索引中的数据产生任何影响。事实上,在不重新索引数据的情况下更改模式可能会导致索引出现严重问题,以至于唯一的解决方案是完全重新索引数据。
最好尝试考虑您计划索引的数据:它是什么类型的数据?您希望如何搜索它?文档中的字段将如何显示给用户?
如果您还不确定,请计划进行一些测试索引运行,以查看文档中的数据如何使用默认设置进行索引。在您的实施计划中预留一些迭代时间,从小处着手。您在索引所有文档之前越能定义您的模式,您的用户就越有可能获得成功的搜索应用程序。
有关模式的更多信息,请参见模式元素部分。