apachesolr模式配置

apachesolr模式配置,solr,Solr,所以我对ApacheSolr还很陌生,现在我知道如何处理这种情况。我来自OO编程背景,因此首先让我解释对象关系: 以一个名为Movie的对象为例,该对象有两个文本字段:title和description。用户可以将电影与标签相关联。这些标签是用户特有的,其他用户看不到 因此,一部示例电影可以有如下内容: “电影标题”,“电影描述” 用户1标签:“tag1”、“tag2” 用户2标签:“动作”、“某物” 我需要设计一个schema/solr查询,这样当user1搜索电影时,如果他们键入“actio

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

以一个名为Movie的对象为例,该对象有两个文本字段:title和description。用户可以将电影与标签相关联。这些标签是用户特有的,其他用户看不到

因此,一部示例电影可以有如下内容:

“电影标题”,“电影描述” 用户1标签:“tag1”、“tag2” 用户2标签:“动作”、“某物”

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

我考虑过的事情:

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

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

我还缺少其他选择吗?还是有办法实现1?或者,最简单的选项就是选项2,这就是知道自己在用Solr做什么的人会怎么做?

有多少用户

如果数量不多,则可以使用动态字段tag_user1、tag_user2,并修改eDismax字段列表以匹配或不匹配,例如使用字段名别名


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

它会在多少用户的情况下开始产生问题?当您的性能开始下降时:-)对于此类问题,永远不会有明确的答案。这只是一个测试的问题。但是如果您有5-10个用户,那么使用动态字段可能是可以的。如果你是成百上千的,这可能太多了。嘿,我只是想让你知道,我还在用你答案的一部分实现搜索的过程中。我想等一下,让一切正常运行,测试性能,然后再回来接受,或者给新答案添加信息。谢谢你的耐心。