不断更新数据的全文搜索
本文关键字:搜索 文搜索 更新 数据 | 更新日期: 2023-09-27 18:25:35
我正在ASP.NET MVC中开发一个web应用程序,它涉及到相当复杂的(我认为)搜索情况。基本上,我有一堆有标题和内容的条目。这些是我想要提供全文搜索的字段。问题是,我还跟踪这些条目的评级(比如赞成票/反对票)。我使用MongoDB作为我的数据库,我有一个单独的集合来收集所有这些投票。我计划使用map/reduce函数将投票集合中的所有文档转换为文章的单个"分数"。当我进行搜索时,我希望文章的分数对排名有影响。
我一直在研究许多不同的全文搜索服务,看起来所有酷孩子都在使用Lucene(在我的例子中是Lucene.NET)。问题是,由于在我第一次创建索引时,分数不是文档的一部分,我不知道该如何设置Lucene。每次有人投票支持一篇文章时,我是否需要更新Lucene索引?我在这里有点迷路了。
我还没有写任何这样的代码,所以如果你有更好的方法来解决这个问题,请分享。
问题是,由于当我将首先创建索引,我不知道如何设置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:
- 为每个与lucene相关的更新发送异步消息
- 处理这些消息,并在每次消息到来时更新lucene
- 异步处理非常重要,否则会影响应用程序性能
我会选择#1,因为它对服务器来说应该更便宜。
选择你更喜欢的。
直接进入MongoDB或数据库,增加和减少投票。在我看来,你必须不断更新数据库。不需要变得复杂。添加了一些内容,请在数据库中添加一些内容。如果网站发生变化,请随时更新、插入、删除。需要跟踪更改,并且跟踪位置在mongodb或sql数据库中。对于搜索字段,请使用mongodb字段搜索参数,并组合它返回的所有字段,然后自己对它们进行排名。