我在solr中有以下数据库结构
<doc>
<int name="bookid">123</int>
<str name="bookname">java</str>
<arr name="provider">
<str>JMD</str>
<str>BBH</str>
<str>RBH</str>
</arr>
<arr name="price">
<int>120</int>
<int>125</int>
<int>100</int>
</arr>
</doc>
............... 更像这样的文档。我想过滤器,如提供者是JMD,价格是100。 solr查询用于此目的。
答案 0 :(得分:0)
使用过滤器(fq)
http://localhost:8983/solr/collection1/select?indent=on&q=*:*&wt=json&fq=provider:JMD&fq=price:100
替换主机和集合名称
答案 1 :(得分:0)
最简单的解决方案 - 只要你正在寻找你所描述的匹配 - 就是将两个值合并到一个字段中进行过滤:
<arr name="provider_price">
<str>JMD__120</str>
<str>BBH__125</str>
<str>RBH__100</str>
</arr>
然后使用过滤器查询进行查询:fq=provider_price:JMD__100
。
另一种选择,只要字段数不是太大(如果字段数量很大,使用DocValues可能会有所帮助) - 这也可以让你正确地搜索范围(你也可以使用以前的方法,只要您将值前缀为给定长度为0,因此它们处于相同的词法排序顺序中):
<arr name="JMD_price">
<str>120</str>
</arr>
<arr name="BBH_price">
<str>125</str>
</arr>
<arr name="RBH_price">
<str>100</str>
</arr>
查询:fq=JMD_price:100
第三种选择是为这些查询使用单独的核心:
<doc>
<int name="bookid">123</int>
<str name="bookname">java</str>
<str name="provider">JMD</str>
<int name="price">120</int>
</doc>
<doc>
<int name="bookid">123</int>
<str name="bookname">java</str>
<str name="provider">BBH</str>
<int name="price">125</int>
</doc>
<doc>
<int name="bookid">123</int>
<str name="bookname">java</str>
<str name="provider">RBH</str>
<int name="price">100</int>
</doc>
查询将为fq=provider:JMD AND price:100
。
第四个选项是使用父/子文档,但这会使针对索引的任何查询复杂化。