例如,如果我有这两个文件:
id: 1
multifield: 2, 5
id: 2
multifield: 2, 5, 9
然后说我有一个设置我正在查询,这是{2,5,7}。我想要的是返回文档1,因为2和5都包含在集合中。但是不应该返回文档2,因为9不在集合中。
多值字段和我的集都是任意长度的。希望这是有道理的。
答案 0 :(得分:6)
想出来了。 This是灵感,特别是建议使用Function Queries的答案。
在问题中使用相同的数据,我会在我的文档中添加一个计算字段,其中包含我的多值字段中的值数。
id: 1
multifield: 2, 5
nummultifield: 2
id: 2
multifield: 2, 5, 9
nummultifield: 3
然后我将使用带有一些函数查询的frange。对于我的集合中的每个项目,我将使用termfreq函数,它将返回1或0.然后我将总结所有这些值。最后,如果该总和等于计算字段nummultifield,那么我知道对于该文档,文档中的每个值都存在于集合中。记住我的设置是2,5,7所以我的函数查询看起来像这样:
fq={!frange l=0 u=0}sub( nummultifield, sum( termfreq(multifield,2), termfreq(multifield,5), termfreq(multifield,7)))
如果我们填写文档1和2的值,它将如下所示:
Document 1: sub( 2, sum( 1,1,0 ) ) = 0 ' in my range of {0,0} so Doc 1 is returned
Document 2: sub( 3, sum( 1,1,0 ) ) = 1 ' not in the range of {0,0} so not returned
我已经测试过了,效果很好。您需要确保不在多字段中复制任何值,否则您将得到奇怪的结果。顺便说一下,只要你想从一个或多个函数查询伪造一个布尔结果,就可以使用这个使用frange的技巧。
答案 1 :(得分:0)
分面可能就是你要找的东西。
http://wiki.apache.org/solr/SolrFacetingOverview
http://www.lucidimagination.com/devzone/technical-articles/faceted-search-solr
how to search for more than one facet in solr?
我从Lucid Imagination链接改编了这个。
选择值为2或5或7的所有文档:
http://localhost:8983/solr/select?q=*
&facet=on
&facet.field=multifield
&fq=multifield:2
&fq=multifield:5
&fq=multifield:7
不完整:我不知道排除所有其他值的任何选项。