solr join查询

CROSS-DOCUMENT JOINS

solr 的join相当于SQL的nested join;solr join query的语法如下:

/select?fl=RETURN_FIELD_1, RETURN_FIELD_2&q={!join from=FROM_FIELDto=TO_FIELD}CONSTRAINT_FIELD:CONSTRAINT_VALUE 

对比SQL表达式为:

Select RETURN_FIELD_1, RETURN_FIELD_2 FROM join-data
WHERE TO_FIELD IN (
SELECT FROM_FIELD from join-data
WHERE CONSTRAINT_FIELD= 'CONSTRAINT_VALUE'

但是solr的这种join query并不是真正的传统SQL join query,因为solr 的这种join不能返回子查询的内容,子查询只用来限制主查询的返回内容。

但是上面这种join都是在一个core里面query的。


CROSS-CORE JOINS

只要join query的core都在一个solr instance 上,那么就可以cross-core join。

例如:

Restaurant core’s schema.xml
<field name="id" indexed="true" stored="true" />
<field name="restaurantname" indexed="true" stored="true" />
<field name="description" indexed="true" stored="false" />
User actions core’s schema.xml
<field name="id" type="string" indexed="true" stored="true" />
<field name="userid" type="string" indexed="true" stored="true" />
<field name="restaurantid" type="string" indexed="true" stored="true" />
<field name="actiontype" type="string" indexed="true" stored="false" />
<field name="actiondate" indexed="true" stored="false" />

我么可以使用如下查询

http://localhost:8983/solr/join_restaurants/select?
fl=restaurantname,text&
q="Indian"& 
fq={!join fromIndex=join_useractions
toIndex=join_restaurants
from=restaurantid 
to=id}userid:user123 AND actiontype:clicked 
AND actiondate:[NOW-14DAYS TO *]


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Join 是 Spring Data Solr 框架中的一个查询类,可以实现 SolrJoin 操作。使用 Join,可以依据 Solr 数据库中的两个或多个集合之间的关系,将它们的文档组合在一起,生成一个新的集合。Join 向上递归地处理集合中的每个文档,以获取其关联文档,最终返回一个包含所有指定关联文档的新集合。 使用 Join,需要创建一个 Join 对象,并调用 on 方法,指定要进行 Join 的两个集合之间的关系,然后调用 from 方法,指定数据源,生成一个 Query 对象。最后,可以通过 SolrTemplate 对象进行查询,获取匹配的文档集合。 一个 Join 示例代码如下: ```java Join join = new Join("order_id", "id"); Criteria criteria = new Criteria("order_total").greaterThan(100); Query query = new SimpleQuery(criteria).addProjectionOnField("product_name").addProjectionOnField("order_id").addJoin(join); Page<JoinResult> page = solrTemplate.queryForPage(query, JoinResult.class); List<JoinResult> results = page.getContent(); ``` 这个 Join 查询,是根据两个集合中的 order_id 字段和 id 字段进行关联的。在查询条件中,使用了一个简单查询查询 order_total 大于 100 的文档。使用 addProjectionOnField 方法添加两个字段的投影,在查询结果中可以获取这两个字段的值。将 Join 对象添加到 Query 对象中,solrTemplate.queryForPage 方法执行查询,返回匹配的 JoinResult 集合。 更多关于 Spring Data Solr Join 的信息,可以参考 Spring Data Solr 的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值