【问题标题】:Apache Solr Schema ConfigurationApache Solr 架构配置
【发布时间】:2023-04-06 11:02:02
【问题描述】:

所以我对 Apache Solr 还是很陌生,现在我知道如何处理这种情况。我来自 OO 编程背景,所以首先让我解释一下对象关系:

获取一个名为 Movie 的对象,它有两个文本字段,标题和描述。用户可以将电影与标签相关联。这些标签是特定于用户的,对其他用户不可见。

所以一个示例电影可能是这样的:

“电影名称”、“电影描述” 用户1标签:“标签1”,“标签2” User2Tags:“动作”、“其他东西”

我需要设计一个 schema/solr 查询,这样当 user1 搜索电影时,如果他们输入“action”,上面的电影就不会出现。这是因为 user2 将“action”与“Movie Title”相关联,而不是 user1。

我考虑过的事情:

1) 过滤查询 - 这些似乎不起作用,因为一旦为每部电影建立索引,我不知道如何避免将所有用户标签绑定到电影的索引。

2) 电影标签关联的单独核心,每次搜索只需执行两个查询。我知道我可以这样做,但制作另一个核心对我来说似乎太过分了。

我还缺少其他选项吗?或者有没有办法实现1?还是最简单的选项只是选项 2,知道他们在使用 Solr 做什么的人会这样做?

【问题讨论】:

    标签: solr


    【解决方案1】:

    有多少用户?

    如果不是很多,那么您可以拥有动态字段 tag_user1、tag_user2 并修改 eDismax 字段列表以匹配或不匹配它,例如通过使用字段名称别名。

    另一个选项是在值前面加上用户 ID。所以标签字段将有:user1_tag1、user1_tag2、user2_action、user2_somethingElse。然后,您需要在查询链中使用自定义过滤器,该过滤器将在您的搜索令牌前面加上请求的用户,因此只有前缀值会匹配。

    【讨论】:

    • 在有多少用户时会开始产生问题?
    • 当你的表现开始受到影响时 :-) 这类问题永远没有明确的答案。这只是一个测试的问题。但是如果你有 5-10 个用户,使用动态字段可能是可以的。如果你成百上千,那可能太多了。
    • 嘿只是想让您知道我仍在使用您的部分答案实施搜索。我想等待并让一切正常工作并测试性能,然后再回来接受或向新答案添加信息。感谢您的耐心等待。
    猜你喜欢
    • 2011-03-07
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多