搜索和标记MongoDB学术论文数据库的方法

时间:2015-09-30 00:25:53

标签: python mongodb search lucene

对这个问题含糊不清的性质表示道歉,但老实说我不太清楚从哪里开始,并且我想在这里寻求指导。

作为练习,我已经下载了几篇学术论文,并将它们作为纯文本存储在mongoDB数据库中。

我想编写一个搜索功能(使用Python,R,无论如何),当您输入文本并返回最相关的文章时。显然,相关的真的很难 - 这就是google做得很好的事。

然而,我并不是在寻找它是完美的。只是得到一些东西。我的一些想法是:

1)简单的MongoDB全文搜索

2)实施Lucene搜索

3)标记它们(不确定如何)然后按最大数量的标签返回它们?

是否有人使用过开箱即用的解决方案并且工作得相当好?我可以随时优化搜索功能 - 现在我只想让所有部分一起移动......

谢谢!

1 个答案:

答案 0 :(得分:1)

  

是否有人使用过这种解决方案并且工作得相当好的解决方案?

这取决于你如何定义,但简单来说,我说不。 没有单一且准确的定义。当试图实现良好的搜索算法时,会出现特定问题固有的许多挑战。这些挑战在于:

  • 用户需要多样性。不同领域的用户具有不同的意图,因此对搜索结果页面的期望不同;
  • 自然语言多样性,如果你试图实现多语言搜索(德语有很多名词化合物,俄语有很大的屈曲变异性等);

有些算法被证明比其他算法更好,因此从一开始就很好。 TF*IDFBM25两个最受欢迎。

  

我以后可以随时优化搜索功能 - 现在我只想让所有部分一起移动......

MongoDB或任何具有全文索引支持的RDBMS足以用于概念验证,但如果您需要针对搜索性能进行优化,则需要反向索引(Solr / Lucene)。从Solr / Lucene您将有能力管理:

  • 如何准确地说出单词(这对于解决undersemming/overstemming problems)很重要;
  • 这个词是什么。是"超级计算机"一个词?怎么样" stackoverflow"或" OutOfBoundsException"?
  • 同义词和单词扩展(应该" O 2 "找到"氧气"查询?)
  • 如何执行搜索。在搜索过程中可以忽略哪些单词。需要找到哪些。哪一个需要在彼此附近找到(想想搜索短语:"没有退火"或者#34;没有扩展")。

这是首先想到的。

因此,如果您计划解决这些问题,我绝对建议将Lucene作为框架,或者Solr / ElasticSearch作为搜索系统,如果您需要快速构建概念验证。如果没有,MongoDB / RDMS将运行良好。