This question already has answers here:
Synonyms using Lucene

(3 个回答)


6年前关闭。




我有一个使用 lucene.Net 的应用程序,但我在使用 Lucene 的同义词功能时遇到问题,在搜索短语/术语中有多个词

例如,如果我想搜索单词 "superman" 并设置了一个同义词:
"spiderman" 我期望(并且确实)得到与 "spiderman" 以及 "superman" 相关的结果

现在我想要的是搜索 "Justice League" 并将该术语的同义词设置为 "The Avengers"

并且还说 “超人” 和同义词 “正义联盟”

你有点明白我要去哪里了。
我想总而言之有能力设置 多短语同义词
我知道同义词确实是 1 个词到 1 个词,但是是否有任何自定义方法与 Lucene.NET Lucene 本身一般人们用来解决这个问题。
我听说 lucene 正在添加这个功能,但到目前为止我还没有看到任何我觉得有用的东西。

谢谢
埃德

最佳答案

看看solr.SynonymFilterFactory

请记住,虽然 SynonymFilter 很乐意处理包含多个单词的同义词(即:“sea biscuit, sea biscit, seabiscuit”),但处理此类同义词的推荐方法是在编制索引时扩展同义词。这是因为在查询时可能会出现两个潜在问题:

  • Lucene QueryParser 在向分析器提供任何文本之前对空格进行标记,因此如果一个人搜索单词 sea biscit,分析器将分别获得单词“sea”和“biscit”,并且不会知道它们匹配代名词。
  • 短语搜索(即:“sea biscit”)将导致 QueryParser 将整个字符串传递给分析器,但如果 SynonymFilter 被配置为扩展同义词,那么当 QueryParser 从分析器获取结果标记列表时,它将构造一个不会产生预期效果的 MultiPhraseQuery。这是因为分析器可用于指示两个术语占据相同位置的机制有限:无法指示“短语”与术语占据相同的位置。对于我们的示例,生成的 MultiPhraseQuery 将是“(sea | sea | seabiscuit) (biscuit | biscit)”,这与文档
  • 中出现的“seabiscuit”的简单情况不匹配

    关于c# - Lucene .NET 的多短语同义词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23014175/

    10-12 16:22