匈牙利语比英语难点。这些词可以很奇怪地更改,这意味着如果我们想给用户带来很好的体验,就需要对搜索进行微调。
我已经进行了很长时间的研究,并且遇到了一些可能的解决方案,但是我不确定它们是否完全适合我们的需求。这就是为什么我想向您寻求一些使用solr方面较有经验的帮助。
I.带或不带空格的单词
无论单词有空格还是无空格,如何都能得到相同的结果?
假设我正在寻找玻璃花瓶(匈牙利语中为“üvegváza”)。在匈牙利语中,将这些单词也一起写是很普遍的。如果有人在没有空格的情况下键入单词,怎么可能得到相同的结果: üvegváza”?
反之亦然,如何获得搜索词“üvegváza”中带有“üvegváza”字的商品?
II。处理词缀,词尾变化
在匈牙利语中,词尾变化可以改变单词本身。例如,如果您正在寻找“带有花饰的花瓶”,则可以说:
处理拐点的最佳方法是什么?例如,如果我键入“virág”,那么如何为“virágos”,“virággal”给出结果?
反之亦然:输入关键字“virágos”并获得带有单词“virág”的商品?
您对我们如何使它们发挥作用有任何建议/想法吗?
最佳答案
此解决方案可以实现,您可以使用NGramTokenizerFactory
将单词分解为较小的标记。
像这样使用
<analyzer>
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="4" maxGramSize="15"/>
</analyzer>
在这里,如果您输入为
"bicycle"
那么创建的 token 是Out:
"bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"
您可以为您的字段尝试此
NGramTokenizerFactory
并在solr分析工具中进行检查。如果它与您的查询文本匹配。您还可以查看
EdgeNGramTokenizerFactory
,它读取字段文本并生成大小在给定范围内的边缘n元语法标记。这可以像
<analyzer>
<tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5"/>
</analyzer>
它具有另一个属性
side
:("front"
或"back"
,默认为"front"
)是从文本的开头(front)
还是结尾的(back)
计算n-gram。输入文字:
"babaloo"
输出文本:"ba", "bab", "baba", "babal"
关于solr - Solr词缀以及带或不带空格的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36620173/