匈牙利语比英语难点。这些词可以很奇怪地更改,这意味着如果我们想给用户带来很好的体验,就需要对搜索进行微调。

我已经进行了很长时间的研究,并且遇到了一些可能的解决方案,但是我不确定它们是否完全适合我们的需求。这就是为什么我想向您寻求一些使用solr方面较有经验的帮助。

I.带或不带空格的单词

无论单词有空格还是无空格,如何都能得到相同的结果?

假设我正在寻找玻璃花瓶(匈牙利语中为“ü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”的商品?

    您对我们如何使它们发挥作用有任何建议/想法吗?

    最佳答案

    此解决方案可以实现,您可以使用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/

    10-16 21:23