gpt4 book ai didi

Solr:将 OR 查询中的匹配数过滤到多值字段

转载 作者:行者123 更新时间:2023-12-03 14:05:28 25 4
gpt4 key购买 nike

给定以下示例 solr 文档:

<doc>
<field name="guid">1</field>
<field name="name">Harry Potter</field>
<field name="friends">ron</field>
<field name="friends">hermione</field>
<field name="friends">ginny</field>
<field name="friends">dumbledore</field>
</doc>
<doc>
<field name="guid">2</field>
<field name="name">Ron Weasley</field>
<field name="friends">harry</field>
<field name="friends">hermione</field>
<field name="friends">lavender</field>
</doc>
<doc>
<field name="guid">3</field>
<field name="name">Hermione Granger</field>
<field name="friends">harry</field>
<field name="friends">ron</field>
<field name="friends">ginny</field>
<field name="friends">dumbledore</field>
</doc>

以及以下查询(或过滤查询):
friends:ron OR friends:hermione OR friends:ginny OR friends:dumbledore 

所有三个文档都将被返回,因为它们每个都至少有一个指定的 friend 。

但是,我想为匹配的 friend 数量设置一个最小(和最大)阈值。例如,只返回至少有 2 个但不超过 3 个指定 friend 的文档。

这样的查询只会返回第三个文档 (Hermione Granger),因为她指定了 4 个 friend 中的 3 个,而第一个 (Harry Potter) 匹配所有 4 个,第二个 (Ron Weasley) 仅匹配 1 个。

这在 Solr 查询中可能吗?

最佳答案

你会想要使用 function query , termfreq ,并计算匹配的术语(在您的情况下也称为“ friend ”)的数量。您可以总结结果,然后只返回阈值内的文档,使用 frange , 像这样:

{!frange l=2 u=3}sum(termfreq(friends,'ron'),termfreq(friends,'hermione'),termfreq(friends,'ginny'),termfreq(friends,'dumbledore'))
termfreq(...)将返回 1对于找到的每个 friend ,它们的总和就是您针对阈值(您在 !frange 语句开头指定的下限和上限)进行测试的结果。

你可以把它放在 q:字段或 fq: field 。这是在 Solr 管理面板中供您引用:

enter image description here

关于Solr:将 OR 查询中的匹配数过滤到多值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16488883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com