所以我对Apache Solr很新,并且我现在知道如何处理这种情况。我来自OO编程背景,所以首先让我解释对象关系:
获取一个名为Movie的对象,该对象包含两个文本字段,标题和描述。电影可以由用户与标签相关联。这些标签特定于用户,并且对其他用户不可见。
所以电影的例子可能是这样的:
"电影标题","电影的描述" User1Tags:" tag1"," tag2" User2Tags:" action"," somethingElse"
我需要设计一个schema / solr查询,以便当user1搜索电影时,如果他们输入" action",则上面的电影将不会显示。这是因为user2已经关联了" action"用"电影标题",而不是用户1。
我考虑过的事情:
1)过滤查询 - 这些看起来不像每个电影的索引构建一样,我不知道如何避免将所有用户标签与电影的索引联系起来。
2)电影标记关联的单独核心,每次搜索只做两次查询。我知道我可以这样做,但是制造另一个核心似乎对我来说太过分了。
我还缺少其他选择吗?或者有没有办法实现1?或者最简单的选择只是选项2,那么知道他们在Solr做什么的人会怎么做呢?
答案 0 :(得分:1)
有多少用户?
如果不是很多,那么您可以拥有动态字段tag_user1,tag_user2并修改eDismax字段列表以匹配或不匹配,例如使用字段名称别名。
另一个选项是使用userid为值添加前缀。所以标签字段将具有:user1_tag1,user1_tag2,user2_action,user2_somethingElse。然后,您需要在查询链中使用自定义过滤器,该过滤器将使用请求的用户作为搜索令牌的前缀,因此只有前缀值匹配。