【问题标题】:Can Lucene.net be used for a tag based search system?Lucene.net 可以用于基于标签的搜索系统吗?
【发布时间】:2012-03-15 09:22:00
【问题描述】:

我正在开发一个包含数百个视频的 ASP.Net MVC3 应用程序。我想根据标签和其他参数(例如上传视频的用户类型、视频日期、视频类别等)创建一个搜索系统。

我一直在环顾四周,Lucene.NET 似乎确实是全文搜索的好工具,但我不知道它是否是我项目的最佳解决方案...我已阅读教程,他们建议保留搜索索引到最低限度,但您不应该访问您的数据库来检索未存储在搜索索引中的额外数据...

这怎么可能?

举个例子:我有一个视频行(作为一个概念,这实际上保存在不同的 SQL 表中),其中包含视频 ID、视频名称、视频文件名、完整路径、用户 ID 的列,用户类型,标签,创建日期,视频类别,视频子类别,视频位置等...如果我想创建一个lucene搜索索引,我想我必须把所有信息放在那里,以便以后我可以查询在每个参数上,对吧?

在我看来,这似乎是 SQL 数据库的副本,但是从 lucene 搜索索引中添加、编辑和删除文档的工作量很大。这是使用 lucene 时的标准场景吗?我在 lucene 中看到的所有示例都是基于帖子 ID、帖子标题和帖子正文。

你怎么看?能给我点光吗?

【问题讨论】:

  • 这也称为“分面”或“参数”搜索。正如 Marc 指出的那样,这是一个重复,但它可能会比在 SQL 中使用视图或连接更快。

标签: c# asp.net asp.net-mvc-3 lucene lucene.net


【解决方案1】:

是的,如果您想从 lucene 中查询多个字段(包括标签之类的内容),您需要使该数据可用于 lucene。这可能听起来是重复,但它不是冗余重复 - 它将数据重组为非常不同的布局 - 为搜索编制索引。

它应该可以正常工作;这几乎就是搜索的工作原理here on stackoverflow(使用 lucene.net 执行搜索)。

但是,应该注意的是,几百个样本并不是一个大样本:坦率地说,您可以按照自己喜欢的方式进行操作,并且所需的时间大致相同。编写复杂的 SQL 查询应该可以工作,数据库中的全文搜索也应该工作(这就是 stackoverflow 的搜索使用的工作方式),内存中的过滤对象也应该工作(在几百个级别,您可以轻松地将所有数据(不包括视频帧)缓存在内存中)。

【讨论】:

  • 谢谢 Marc,当我说几百可能是几千时,这不是数字问题,而是早期阶段的正确选择。您将如何将标签添加到搜索索引中?每个标签的独立字符串还是一个字符串?
  • @CSharpLearning 应该可以工作(你可以在 lucene,IIRC 中拥有多值字段)
  • lucene中可以有多个同名字段。
  • 您的意思是对于一个 lucene 文档,您可以添加多个具有相同名称的字段,对吧?就我而言,我可以有 5 个称为标签的字符串字段,对吗?将它们分成单独的字符串或全部放在一起,哪个效果更好?
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 2013-03-03
  • 2018-09-18
  • 1970-01-01
  • 2011-06-28
  • 2012-12-28
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多