Solr随机结果在顶部" n"

时间:2015-01-09 16:00:25

标签: solr

我的情况略有不同。我有几类文档(比如facet字段值catA,catB,catC,....)。我想找到" N" catA或catB的文件。查询将类似于" catA或catB"。现在前100个搜索结果文档具有相同的分数。我只想检索10个文件。因为catA文档首先被索引,所以我得到的10个文档都是catA。在这种情况下我想要的是从前100名中随机选择10个文档。我知道我可以检索100个文档,然后随机选择10个。但是,100是一个示例图,它可以只有10或1000。如果具有分页的随机查询可以做到这一点,那就好了,但它并没有。我能想到的一种方法是先做一个查询来说出100个文档,找不到。具有相同最高分的文档(例如" m"),如果大于10,则使用raws = m进行第二次查询。任何人都可以提出一些想法来做得更好吗?

1 个答案:

答案 0 :(得分:2)

您可以使用用于随机排序的效用字段。 从这里开始:http://lucene.apache.org/solr/4_10_2/solr-core/org/apache/solr/schema/RandomSortField.html

要获得随机排序顺序,您需要使用随机动态字段名称。例如,您需要配置schema.xml:

<types>
    ...
    <fieldType name="random" class="solr.RandomSortField" />
    ... 
</types>
<fields>
    ...
    <dynamicField name="random*" type="random" indexed="true" stored="false"/>
    ...
</fields>

查询示例:

http://localhost:8983/solr/select/?q=*:*&fl=name&sort=random_1234%20desc
http://localhost:8983/solr/select/?q=*:*&fl=name&sort=random_2345%20desc
http://localhost:8983/solr/select/?q=*:*&fl=name&sort=random_ABDC%20desc
http://localhost:8983/solr/select/?q=*:*&fl=name&sort=random_21%20desc

请注意,对同一网址的多次调用将返回相同的排序顺序。