Lucene .NET的多短语同义词

时间:2014-04-11 13:35:13

标签: c# .net lucene lucene.net synonym

我有一个使用lucene.Net的应用程序,我无法使用Lucene的同义词功能在搜索短语/术语中使用多个单词

例如,如果我想搜索" superman" 这个词,并设置了一个同义词: "蜘蛛侠" 我希望(并且确实)取回与"蜘蛛侠" 以及&#相关的结果34;超人"

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

并且还说"超人" 和同义词" Justice League"

你有点了解我的目标。 我想总结一下能够设置多短语同义词。 我知道同义词确实是1个单词到1个单词,但有没有任何自定义方法 Lucene.NET Lucene 本身通常人们用来解决这个问题。 我听说lucene正在添加这个功能,但到目前为止我还没有看到任何东西,同时环顾四周我认为有用。

由于 编

1 个答案:

答案 0 :(得分:1)

查看solr.SynonymFilterFactory

请记住,虽然SynonymFilter会很乐意使用包含多个单词的同义词(例如:"海饼干,海bitit,seabiscuit")处理这样的同义词的推荐方法是扩展索引时的同义词。这是因为在查询时可能会出现两个潜在的问题:

  1. Lucene QueryParser在向分析器提供任何文本之前对空白区域进行标记,因此如果某人搜索单词sea biscit,分析器将被赋予单词" sea"和" biscit"单独地,并且不会知道它们是同义词。
  2. 短语搜索(即:" sea biscit")将导致QueryParser将整个字符串传递给分析器,但是如果SynonymFilter配置为扩展同义词,那么当QueryParser获取结果列表时从分析器返回的令牌,它将构造一个不具有所需效果的MultiPhraseQuery。这是因为分析仪可用的机制有限,表明两个术语占据相同的位置:没有办法表明一个"短语"占据与术语相同的位置。对于我们的例子,得到的MultiPhraseQuery将是"(sea | sea | seabiscuit)(饼干| biscit)"这与" seabiscuit"的简单案例不符。发生在文件中