首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene .NET的多短语同义词

Lucene .NET的多短语同义词
EN

Stack Overflow用户
提问于 2014-04-11 13:35:13
回答 1查看 890关注 0票数 4

我有一个使用lucene.Net的应用程序,在搜索短语/术语中使用Lucene的同义词特性有困难。

例如,如果我想搜索单词"superman",并设置了一个同义词:“蜘蛛侠”,我希望(并且确实)返回与“蜘蛛侠”以及“超人”相关的结果。

现在我想要的是搜索“正义联盟”,并为该术语设置一个同义词,称为“复仇者”

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

你有点像我说的那样。总之,我想有能力设置多短语同义词。我知道同义词确实是1字对1字,但是对于Lucene.NETLucene本身是否有任何自定义的方法来解决这个问题。我听说lucene正在添加这个特性,但是我在环顾四周时还没有看到任何有用的东西。

谢谢艾德

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-18 09:43:36

看看solr.SynonymFilterFactory

请记住,虽然SynonymFilter会很高兴地使用包含多个单词的同义词(例如:"sea biscit、sea biscit、seabiscuit"),但建议的处理此类同义词的方法是在索引时扩展同义词。这是因为在查询时可能会出现两个潜在的问题:

  1. Lucene QueryParser在将任何文本提供给分析器之前在空白上进行标记,因此,如果一个人搜索space这个词,分析器将分别得到" sea“和" biscit”这两个词,并且不知道它们是否匹配同义词。
  2. 短语搜索(即:“searching”)将导致QueryParser将整个字符串传递给分析器,但是如果SynonymFilter被配置为扩展同义词,那么当QueryParser从分析器获得得到的令牌列表时,它将构造一个不会产生预期效果的MultiPhraseQuery。这是因为分析器可用的机制有限,无法表明两个术语占有相同的地位:没有办法表明“短语”与术语占有相同的地位。对于我们的例子,生成的MultiPhraseQuery将是"(sea _ sea _Sea_ seabiscuit) (饼干\ biscit)“,这与文档中出现的"seabiscuit”的简单情况不匹配。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23014175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档