欢迎来到天天文库
浏览记录
ID:38663743
大小:193.50 KB
页数:11页
时间:2019-06-17
《如何在Solr中更好的处理同义词》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、如何在Solr中更好的处理同义词当使用Solr来构建搜索引擎的时候,你可能经常会遇到这样的场景:你有一个同义词列表,并且你想用户查询也能够命中到同义词。听起来很简单不是吗?为什么搜索“dog”的时候,不能命中包含“hound(猎犬)”或者“pooch(狗)”的文档呢?甚至包含“Rover(流浪者)”和“canisfamiliaris(犬)”?叫Rover或者其他名字,可能只是为了让小狗听起来很可爱。事实证明,Solr的同义词扩展没有你想象的那么简单。但是我们有很多好的方法来搬石头砸自己的脚。The
2、SynonymFilterFactorySolr提供了一个听起来很酷的SynonymFilterFactory,它可以接收一个逗号分割的同义词文本。你甚至可以选择同义词是相互扩展还是特定方向的替换。举例来说,你可以让“dog”,“hound”和“pooch”都扩展为“dog
3、hound
4、pooch”,或者你可以指定“dog”映射到“hound”,反过来却不可以,或者你可以把所有的词都转化为”dog“,Solr处理这部分是非常灵活的并且做的很棒。当你考虑是把SynonymFilterFactory放
5、在查询分析器还是索引分析器时,这个问题就变得很复杂啦。Index-timevs.query-time下图总结了查询时(query-time)和索引时(index-time)同义词扩展的基本差异。当然我们是为了解决solr中使用的问题,但是这2种方法适用于任何信息检索系统。你的直观选择可能是将SynonymFilterFactory放在查询分析器内。理论上,这样做有以下优点:·索引大小不会变化·同义词可以随时更换,不用更新索引·同义词实时生效,不需要重新索引然而,按SolrDocs所说,这是一个Ve
6、ryBadThingtoDo(™),显然的你应该把SynonymFilterFactory放在索引分析器里,而不是简单的依靠你的直觉来判断。文档里说,查询时的同义词扩展有以下的缺点:·多字同义词并不能识别为短语查询·罕见同义词的IDF会被加权,导致不可想象的搜索结果·多字同义词不会匹配查询这有点复杂,因此也值得我们一一解决这些问题。多字同义词并不能识别为短语查询在HealthOntheNet,我们的搜索引擎使用MeSH来做查询扩展,MeSH是一个为健康领域提供优质同义词的医疗本体。例如”breas
7、tcancer“的同义词:breastneoplasm breastneoplasms breasttumor breasttumors cancerofbreast cancerofthebreast因此在正常情况下,如果SynonymFilterFactory配置了expand="true",查询”breastcancer“就变成了:+((breastbreastbreastbreastbreastcancercancer)(cancerneoplasmneoplasmstumortumors
8、)breastbreast)这将命中包含”breastneoplasms“,”cancerofthebreast”等等的文档。然而,这也意味着,如果你正在做一个短语查询(比如”breastcancer“),如果想生效,你的文档必须字面上匹配类似”breastcancerbreastbreast“这样的字符。啊?这里到底发生了什么?事实证明SynonymFilterFactory并没有按你所想来扩展多字同义词。直觉上,可能认为它表现为一个有限自动机,Solr构建出的结果可能类似这样(忽略复数):但是
9、,它真正构建的是下面这样的:简直是一碗意大利面。你可怜的文档必须依序包含所有的4个部分。让人惊讶。同样,DisMax和EDisMax查询分析器的mm(最小匹配)参数,并不能像你所想的那样工作。在上面的例子中,设置mm=100%将需要所有4个部分都匹配。+((breastbreastbreastbreastbreastcancercancer)(cancerneoplasmneoplasmstumortumors)breastbreast)~4罕见同义词的IDF会被加权即使你没有多字同义词,Solr
10、Docs也提到了第二个避免查询时扩展的原因:不正常的IDF加权。考虑我们的”dog”,”hound”,”pooch”例子,查询3个里面的任意一个都会被扩展为:+(doghoundpooch)由于“hound”和”pooch“是比较少见的字,因此无论查询什么,包含这些字的文档会在查询结果中排名特别高。这对可怜的用户来说,简直是一个浩劫,为什么搜索”dog“的时候,会有那么多包含”hound“和”pooch“的怪异文档排名那么高。索引时扩展通过给”dog”,”hound”,”pooch
此文档下载收益归作者所有