3

我有一组用户。每个用户都有一些字段。其中一个字段是映射,例如:“键,值”,其中值表示顺序。

例如:

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 次等单词,但这让我觉得非常缓慢且痛苦(除了不是一个好的方法)。

你们有任何想法吗?

4

2 回答 2

1

根据 Andrea 的建议,解决方案可能是以下几行:

  • 将值索引为动态字段(例如*_value,在 中banana_value)。
  • 使用eDisMax 查询解析器 提升或 bf您的搜索结果,使用类似bf=field($value_field)wherevalue_field是您使用 SolrJ 指定的附加参数。通过这个参数,您将提供查询词+动态字段后缀(例如banana_value),并且由于功能查询字段,您将获得该特定对的值并相应地提升结果。
于 2014-12-19T17:01:38.507 回答
0

嗯,我不确定,但我认为这是不可能的......排序字段必须是单值的(多值没有意义),我想你有一个多值的字段。

现在假设您将地图的每个值索引为动态字段(字段名称是键,字段值是相应的权重)...在这里您解决了单值问题,但您遇到了另一个有趣的问题...排序字段无法在查询时确定,因为它取决于搜索匹配...

于 2013-01-16T20:13:59.207 回答