索引对<key,value =“”>并返回按Solr </key,>上的值排序的结果

时间:2013-01-16 18:20:04

标签: java solr solrj

我有一组用户。每个用户都有一些字段。其中一个字段是地图,例如:“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次香蕉等等这些词语,但这让我觉得极其缓慢(除了不是一个很好的方法)。

你们中的任何人都有任何想法吗?

2 个答案:

答案 0 :(得分:1)

根据Andrea的建议,可以采用以下方式解决问题:

  • 将值编入动态字段(例如*_value中的banana_value)。
  • 使用bf=field($value_field)之类的value_field eDisMax query parser搜索结果,其中{{1}}是您使用SolrJ指定的附加参数。通过此参数,您将提供查询字词+动态字段后缀(例如banana_value),并且由于函数查询boost or bf,您将获得该特定对的值并提升结果因此。

答案 1 :(得分:0)

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

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