我有一组用户。每个用户都有一些字段。其中一个字段是地图,例如:“key,value”,其中值代表订单。
例如:
user1
有:
id = user1
tags = <apples, 100>, <bananas, 80>, <oranges, 60>
name = "Ann Miller"
likes = "apples and skydiving, and sometimes solving puzzles"
quote = "Never spent a day without a smile!"
user2
有:
id = user2
tags = <bananas, 100>, <pears, 80>, <apples, 60>
name = "Mike Anderson"
likes = "sleep and eating pizza"
quote = "Math, it's a puzzle to me. I love figuring out puzzles."
我想要一个返回用户的常规搜索,例如:
search | result order
--------+--------------------
smile | user1
puzzle | user2, user1
bananas | user2, user1
apples | user1, user2
目前我有一个向巫婆提交的一般内容我复制了每个字段的值,然后我在该字段上进行搜索。现在我只把对的键放在里面,所以排序不是我想要的。
我使用SolrJ索引文档(从数据库中提取)并进行搜索。
我曾经想过要重复100次苹果,80次香蕉等等这些词语,但这让我觉得极其缓慢(除了不是一个很好的方法)。
你们中的任何人都有任何想法吗?
答案 0 :(得分:1)
根据Andrea的建议,可以采用以下方式解决问题:
*_value
中的banana_value
)。 bf=field($value_field)
之类的value_field
eDisMax query parser搜索结果,其中{{1}}是您使用SolrJ指定的附加参数。通过此参数,您将提供查询字词+动态字段后缀(例如banana_value),并且由于函数查询boost or bf,您将获得该特定对的值并提升结果因此。 答案 1 :(得分:0)
嗯,我不确定,但我认为这是不可能的......排序字段必须是单值的(多值没有意义),我想你有一个多值字段。
现在让我们假设您将地图的每个值索引为动态字段(字段名称是键,字段值是相应的权重)...在这里您解决了单一问题,但是您遇到了另一个有趣的问题...在查询时无法确定排序字段的名称,因为它取决于搜索匹配...