匈牙利语比英语有点棘手。这些词可以很奇怪地改变,这意味着如果我们想给用户一个很好的体验,我们需要微调搜索。
我已经做了很长一段时间的研究,我遇到了一些可能的解决方案,但我不确定它们是否适合我们的需求。这就是为什么我想请求一些在使用solr方面经验丰富的人的帮助。
予。用或不用空格写的字
如果使用或不使用空格键入单词,如何获得相同的结果?
说我正在寻找一个玻璃花瓶(匈牙利语中的“üvegváza”)。在匈牙利语中,将这些单词组合在一起是很常见的。如何才能获得相同的结果结果如果有人输入没有空格的单词:“üvegváza”? 反之亦然,如何在搜索词“üvegváza”中获得带有“üvegváza”字样的项目?
II。处理词缀,变形
在匈牙利语言中,变形可以改变这个词本身。例如,如果您正在寻找“花卉装饰花瓶”,您可以说:
“virágosváza”=带花的花瓶(最接近的英文)
“vázavirággal”=带花的花瓶
“vázavirágokkal”=带花的花瓶
处理变形的最佳方法是什么?例如,如果我输入“virág”,如何为“virágos”,“virággal”提供结果呢? 反之亦然:输入关键字“virágos”并获取带有“virág”字样的项目?
您对我们如何使这些工作有任何建议/想法吗?
答案 0 :(得分:0)
这可以实现,并且可以使用NGramTokenizerFactory
将单词分解为较小的标记。
像
一样使用它<analyzer>
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="4" maxGramSize="15"/>
</analyzer>
此处如果输入为"bicycle"
然后创建的令牌是Out:
"bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"
您可以针对您的字段尝试此NGramTokenizerFactory
,并在solr分析工具中进行检查。如果它与您的查询文本匹配。
您还可以查看读取字段文本的EdgeNGramTokenizerFactory
,并生成给定范围内大小的边缘n-gram标记。
这可以像
一样使用<analyzer>
<tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5"/>
</analyzer>
它有另一个属性side
:( "front"
或"back"
,默认为"front"
)是否从头(front)
开始计算n-gram文本或最后(back)
。
输入文字:"babaloo"
输出文字:"ba", "bab", "baba", "babal"
答案 1 :(得分:0)
要处理多令牌与单令牌写单词的方式,您可能需要查看ShingleFilter并将令牌分隔符设置为“”(空字符串)。如果文本和搜索都可以连接或分离,则可能需要进行一些实验。您可能需要在类型上启用autoGeneratePhraseQueries以获取分隔的单词版本,以使其成为查询时间ShingleFilter(我认为)。