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