给出以下示例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>
Run Code Online (Sandbox Code Playgroud)
以及以下查询(或过滤查询):
friends:ron OR friends:hermione OR friends:ginny OR friends:dumbledore
Run Code Online (Sandbox Code Playgroud)
将返回所有三个文档,因为它们每个都至少有一个指定的朋友.
但是,我想为匹配的朋友数设置最小(和最大)阈值.例如,仅返回至少有2个但不超过3个指定朋友的文档.
这样的查询只返回第三个文件(Hermione Granger),因为她指定了4个朋友中的3个,而第一个(哈利波特)匹配所有4个,而第二个(Ron Weasley)只匹配1个.
这在Solr查询中是否可行?
您将要使用函数查询,termfreq并计算匹配的术语数(在您的情况下也称为"朋友").您可以总结结果,然后只返回阈值内的文档,使用frange如下:
{!frange l=2 u=3}sum(termfreq(friends,'ron'),termfreq(friends,'hermione'),termfreq(friends,'ginny'),termfreq(friends,'dumbledore'))
Run Code Online (Sandbox Code Playgroud)
termfreq(...)将为1每个找到的朋友返回,并且这些是您根据阈值(您在!frange语句开头指定的下限和上限)测试的总和.
您可以将其放在q:字段或fq:字段中.这是在Solr管理面板中供您参考:

| 归档时间: |
|
| 查看次数: |
1826 次 |
| 最近记录: |