【问题标题】:indexing in solr lucenesolr lucene 中的索引
【发布时间】:2011-10-26 19:45:41
【问题描述】:

我有一个网站,用户可以在其中发布一些问题,所以我在 mysql 中有一个这样的表

question_id、user_id、标签、视图、创建日期

我想要的是能够

  • 执行将根据这些返回 question_ids 的搜索 标签

    并按

    排序
    1. 观看次数
    2. 日期,(如最新,或本周、月份)
  • 或搜索指定用户并再次返回 question_ids 按观看次数和日期排序。

就索引而言,我应该以什么方式将所有内容带入 solr? 我必须索引标签、视图、日期吗?我应该索引什么才能获得最佳性能?

【问题讨论】:

    标签: lucene indexing solr search-engine


    【解决方案1】:

    想一想,如果使用 lucene/solr 对您有好处。我不想被误解,但是如果您想在 user_id 列中搜索特定用户 ID,则不需要添加全文搜索引擎。

    无论如何 - 也许你只喜欢有一个小项目来“玩” solr。 所以这里是你的问题的答案:

    就索引而言,我应该以什么方式将所有内容带入 solr 担心吗?

    把所有东西都放到solr/lucene,你需要搜索。使用 DHI(数据导入处理程序)http://wiki.apache.org/solr/DataImportHandler 让 solr 遍历您的表并索引数据。

    我需要索引标签、视图、日期吗?

    是的。你必须索引所有你喜欢使用的东西。 顺便说一句:索引和存储数据之间存在差异。您可以索引字段(如标签、user_id、视图等),但您不需要将它们(附加)存储在 lucene 索引中。如果 lucene/solr 必须返回/传递搜索到的数据,则存储数据是必要的。 否则,solr 只返回匹配文档的 uniqueKey(主键),您必须从 datebes 中获取数据(...其中 pk=) 因此,您不需要存储那些仅与排序相关的字段(例如)。

    我应该索引什么以获得最佳性能?

    仅索引那些需要使用 (solr) 的字段(列)。不要索引你永远不会要求/搜索的字段。

    【讨论】:

    • 好的,我知道不需要搜索用户 ID。但是对于第一部分,如果 solr 创建了这些标签的倒排索引,并且在查询之后它会找到例如 30000 个 question_ids,并且我想从 solr 按视图对它们进行排序,所以我只能从第 800 个到第 900 个 question_id,我怎么能有最大的表现?答案是通过索引标签、视图和存储 questions_ids 以便我可以在 mysql 中查找它们吗?视图的索引是否会确保它不会永远进行,以便对 question_ids 进行排序?
    • 关于您的性能问题。我使用 lucene 索引和大约 1 百万个文档。搜索一个频繁的关键字,获得 90.000 次点击,按相关性排序并按日期提升,返回前 30 个结果需要 - 完全 - 不到 50 毫秒。如果有(子查询)缓存命中,通常需要不到 10 毫秒。最后,这取决于您的文档大小。但我从来没有意识到排序是一个性能问题。
    • >> 例如,它会找到 30000 个 question_id,我想从 solr 中按视图对它们进行排序,这样我就只能从第 800 到第 900 个 question_id
    • 不,我的意思是从这 30000 个中只有第 800 个到第 900 个,而不是例如从第一个到第 100 个结果,例如当您点击第 12 页时在谷歌中。顺便谢谢
    • 使用 solr,您可以定义(对于每次搜索)一个偏移量和您想要获得的文档数(行)。因此,如果您的页面包含 20 个点击/结果,那么您的偏移量为 0、20、40,依此类推。对于 30.000 个文档,您不会注意到第 1 页或第 12 页的查询时间之间存在任何性能问题。
    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2011-01-19
    • 2010-11-26
    • 2013-11-06
    • 2011-10-21
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多