我正在使用ASP.NET MVC中的Web应用程序,这涉及一个相当复杂(我认为)的搜索情况。基本上,我有一堆标题和内容的条目。这些是我想要提供全文搜索的字段。问题在于我还会跟踪这些条目的评级(例如向上投票/向下投票)。我使用MongoDB作为我的数据库,我有一个单独的集合用于所有这些投票。我计划使用map / reduce函数将投票集合中的所有文档转换为文章的单个“分数”。当我进行搜索时,我希望文章的分数对排名有影响。
我一直在寻找许多不同的全文搜索服务,看起来所有很酷的孩子都在使用Lucene(在我的例子中,Lucene.NET)。问题是,由于在我首次创建索引时得分不是文档的一部分,我不知道如何设置Lucene。每次有人投票给一篇文章,我是否需要更新Lucene索引?我在这里有点失落。
我还没有编写任何此类代码,所以如果您有更好的方法来解决此问题,请分享。
答案 0 :(得分:3)
问题是因为当我得分不是文件的一部分 将首先创建索引,我不知道我将如何设置Lucene
有什么问题?只需使用默认值进行评级/投票(可能为0)以及稍后人们投票时更新它。
每当有人投票选择文章时,我是否需要更新 Lucene指数?
不,这可能既昂贵又缓慢。在您的应用程序中,可能会有大量的更新,并且当您经常刷新到磁盘时,lucene可能会很慢。一般来说,几乎所有全文搜索实时更新都不如全文搜索那么重要。所以我建议遵循以下策略:
解决方案#1:
1.在mongodb中创建集合,您将存储与lucene相关的所有更新:
{
_id,
title,
content,
rating, //increment it
status(new, updated, delete) // you need this for lucene
}
2.之后,您需要创建工具,在后台处理所有这些更新(例如,每10分钟一次)。请记住,您需要刷新数据到光盘,例如,在10000次lucene更新/插入/删除后,快速进行lucene索引更新。
使用上述解决方案,您的数据可能会陈旧10分钟,但插入速度会更快。
解决方案#2:
我会选择#1,因为服务器应该更便宜。
选择您喜欢的内容。
答案 1 :(得分:0)
直接进入MongoDB或数据库并增加和减少投票。您必须在我的视图中不断更新数据库。不需要变得复杂。添加了一些东西,在数据库中添加一些东西。如果网站发生变化,请随时更新,插入,删除。需要跟踪更改,跟踪位置在mongodb或sql数据库中。对于搜索字段,请使用mongodb字段搜索参数并组合它返回的所有字段并自行对其进行排名。