我们有一个电影和连续剧数据库,并且由于数据来自许多不同可靠性的来源,我们希望能够对剧集的标题进行模糊字符串匹配。我们在应用程序中使用 Solr 进行搜索,但默认匹配机制在单词级别上运行,这对于短字符串(如标题)来说不够好
过去我使用过 n-gram 近似匹配,我很高兴发现 Lucene(和 Solr)支持这种开箱即用的东西。不幸的是,我无法正确配置它。
我假设我需要一个特殊的字段类型,所以我在我的 schema.xml 中添加了以下字段类型:
<fieldType
name="trigrams"
stored="true"
class="solr.StrField">
<analyzer type="index">
<tokenizer
class="solr.analysis.NGramTokenizerFactory"
minGramSize="3"
maxGramSize="5"
/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
并将架构中的相应字段更改为:
<field name="title" type="trigrams"
indexed="true" stored="true" multiValued="false" />
但是,这并没有像我预期的那样工作。查询分析看起来正确,但我没有得到任何结果,这让我相信在索引时发生了一些事情(即,标题被索引为默认字符串字段而不是 trigram 字段)。
我正在尝试的查询类似于
title:"guy walks into a psychiatrist office"
(有一两个错字)并且它应该匹配“Guy Walks into a Psychiatrist Office”。
(我不确定查询是否正确。)
此外,我实际上希望能够做更多的事情。我想将字符串小写,删除所有标点符号和空格,删除英语停用词,然后将字符串更改为三元组。但是,过滤器仅在字符串被标记后应用......
提前感谢您的回答。