分析屏幕
一旦您在架构中定义了字段类型,并指定了要应用于它的分析步骤,您应该对其进行测试以确保它按照您期望的方式运行。
幸运的是,Solr 管理员界面中有一个非常方便的页面,可以让您执行此操作。您可以为任何文本字段调用分析器,提供示例输入并显示结果令牌流。
例如,让我们看看 bin/solr -e techproducts
示例配置中可用的某些“文本”字段类型,并使用分析屏幕 (http://localhost:8983/solr/#/techproducts/analysis
) 来比较在索引时为句子“运行分析器”生成的令牌与略有不同的查询文本“运行我的分析器”匹配的情况。
我们可以从 text_ws
开始 - 这是可用的最简化的文本字段类型之一
这显示了每个分析步骤(在这种情况下为一个步骤)生成的令牌的简单输出。分词器显示为缩写,悬停或单击此处以查看全名。
如果我们通过选中该框来启用详细输出,则会显示更多详细信息
通过查看每个术语的开始和结束位置,我们可以看到此字段类型所做的唯一事情就是对空格上的文本进行分词。在此图像中,请注意术语“运行”的开始位置为 0,结束位置为 7,而“an”的开始位置为 8,结束位置为 10,“分析器”从 11 开始,在 19 结束。如果还包括术语之间的空格,则计数将为 21;由于它是 19,我们知道空格已从该查询中删除。
还要注意,索引术语和查询术语仍然非常不同。“Running”与“run”不匹配,“Analyzer”与“analyzer”(对于计算机而言)不匹配,显然“an”和“my”是完全不同的词。如果我们的目标是允许“run my analyzer”之类的查询与“Running an Analyzer”之类的索引文本匹配,那么我们需要选择一个不同的字段类型,该字段类型具有索引和查询时间文本分析功能,可以对输入进行更多处理。
特别是我们想要
-
不区分大小写,因此“Analyzer”和“analyzer”匹配。
-
词干提取,因此“Run”和“Running”等词被视为等效术语。
-
停用词修剪,因此“an”和“my”等小词不会影响查询。
对于我们的下一次尝试,我们尝试text_general
字段类型
启用详细输出后,我们可以看到新分析器的每个阶段如何修改它们在传递给下一阶段之前接收的令牌。当我们向下滚动到最终输出时,我们可以看到我们确实开始从每个输入字符串中获得“analyzer”的匹配,这要归功于“LCF”阶段,如果您用鼠标悬停在上面,您会看到是LowerCaseFilter
text_general
字段类型旨在对任何语言都普遍有用,通过解决大小写敏感性问题,它肯定比我们第一个示例中的text_ws
更接近我们的目标。这仍然不是我们正在寻找的内容,因为我们没有看到应用词干提取或停用词规则。因此,现在让我们尝试text_en
字段类型
现在我们可以看到分析器的“SF”(StopFilter
)阶段解决了删除停用词(“an”)的问题,并且当我们向下滚动时,我们还看到“PSF”(PorterStemFilter
)阶段应用适合我们英语语言输入的词干提取规则,以便由我们的“索引分析器”产生的术语和由我们的“查询分析器”产生的术语符合我们的预期。
在这一点上,我们可以继续尝试其他输入,验证我们的分析器在预期匹配时产生匹配令牌,而在我们不期望匹配时产生不同的令牌,因为我们迭代并调整我们的字段类型配置。