c# – Lucene .NET的多短语同义词
作者:互联网
参见英文答案 > Synonyms using Lucene 3个
我有一个使用lucene.Net的应用程序,我无法使用Lucene的同义词功能在搜索短语/术语中使用多个单词
例如,如果我想搜索单词“superman”并设置了同义词:
“蜘蛛侠”我希望(并且确实)取回与“蜘蛛侠”以及“超人”相关的结果
现在我想要的是搜索“正义联盟”,并将该术语的同义词设置为“复仇者联盟”.
并且还说“超人”和同义词“正义联盟”.
你有点得到我要去的地方.
我想总结一下能够设置多个短语的同义词.
我知道同义词确实是1个单词到1个单词,但有没有任何自定义方法与Lucene.NET或Lucene本身一般人们用来解决这个问题.
我听说lucene正在添加这个功能,但到目前为止我还没有看到任何东西,同时环顾四周我发现有用.
谢谢
埃德
解决方法:
请记住,虽然SynonymFilter会很乐意使用包含多个单词的同义词(例如:“sea biscuit,sea biscit,seabiscuit”).处理这样的同义词的推荐方法是在索引时扩展同义词.这是因为在查询时可能会出现两个潜在的问题:
> Lucene QueryParser在向分析器提供任何文本之前在空白区域上进行标记,因此如果一个人搜索单词sea biscit,分析器将单独给出单词“sea”和“biscit”,并且不会知道它们匹配a代名词.
>短语搜索(即:“sea biscit”)将导致QueryParser将整个字符串传递给分析器,但如果SynonymFilter配置为扩展同义词,那么当QueryParser从分析器获取结果的标记列表时,它将构造一个不具备所需效果的MultiPhraseQuery.这是因为分析仪可用的机制有限,表明两个术语占据相同的位置:没有办法表明“短语”占据与术语相同的位置.对于我们的例子,得到的MultiPhraseQuery将是“(sea | sea | seabiscuit)(饼干| biscit)”,这与文档中出现的“seabiscuit”的简单情况不符
标签:c,net,lucene,lucene-net,synonym 来源: https://codeday.me/bug/20190708/1405328.html