solr join查询

2019-03-27 01:19|来源: 网路

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 *]



转自:http://blog.csdn.net/acmilanvanbasten/article/details/35804883

相关问答

更多
  • public static Map<String, Integer> queryByGroup(String qStr,String groupField,String sortField,boolean asc,Integer pageSize,Integer pageNum){ Map<String, Integer> rmap = new LinkedHashMap<String, Integer>(); try { SolrServer server = getS ...
  • 我不知道为什么这不工作,但这是逻辑上相同的,它的工作: -(myField:superneat AND -myOtherField:somethingElse) 也许这与在查询中定义相同的字段两次有关 尝试在solr-user组中询问,然后在这里发回最后的答案! I don't know why that doesn't work, but this one is logically equivalent and it does work: -(myField:superneat AND -myOther ...
  • 这些DB服务器的用途不同,它在很大程度上取决于您的应用程序(以及您存储的数据类型)是否应该仅使用Solr或MySQL。 MySQL可以很好地存储具有大量关系和表格的数据(彼此相关的表格)。 Solr很适合文本搜索(正如你所说:快速索引),如果你没有很多“相关数据”,你确实可以将这些数据存储在相同的文档中。 有些人确实只使用Solr来存储他们的数据库...但我仍然认为RDBM可以很好地用于某些类型的数据。 例如:如果您想允许快速搜索系统用户并存储他们的完整个人资料,以及一些信息详细信息......最好使用So ...
  • 您在每个查询中都给出了参数rows=2147483647 。 该参数的含义是(取自参考文献) 您可以使用rows参数对查询中的结果进行分页。 该参数指定Solr应一次返回客户端的完整结果集中的最大文档数。 默认值为10.也就是说,默认情况下,Solr一次返回10个文档以响应查询。 因此,您告诉Solr生效,在单个响应中发送查询的所有匹配。 这是你糟糕表现的原因。 当查询“java”时 ,谷歌是否会向您发送所有500.000.000次匹配,不会。 为什么不,性能。 我知道的每一个IR应用程序都会为您提供一个带 ...
  • 首先,我认为Solr通配符比“1或多个”更好地归纳为“0或多个”。 我怀疑这是你问题的根源。 (例如,请参阅WildcardQuery的javadoc 。) 其次,你是否在使用词干,因为我的第一个猜测是你正在处理一个词干问题。 Solr通配符在词干方面可能表现得很奇怪。 这是因为通配符扩展是通过搜索存储在倒排索引中的术语列表来进行的; 这些术语将以词干形式出现(可能类似“gatorad”),而不是来自原始源文本(可能是“gatorade”或“gatorades”)的单词。 例如,假设你有一个词干分析器,把“ ...
  • 这样做的一种方式是在fq中使用连接查询,并且它也适用于MLT。 就像是: &fq =(!从=位置连接到=位置)DocumentID:1234 One way of doing this would be using join query in fq and it works for MLT as well. Something like: &fq=(!join from=location to=location)DocumentID:1234
  • 除了新功能之外,Solr 3.6和Solr 4.0之间是否有任何重大差异? 我发现这个问题很奇怪,至少可以说。 错误修复和新功能是发布的全部内容! 您可以在此处查看 Solr版本的完整更新日志。 不要忘记Solr和Lucene是一致发布的,所以你还需要在两个项目中寻找相关的变化。 我可以安全地使用我在Solr 4.0中的现有查询(在Solr 3.6中工作的查询)吗? 查询应该没问题,但索引 - 可能不是。 引用另一篇SO帖子中的 javanna: 索引格式已更改,但Solr将负责升级索引。 一旦用旧索引启动 ...
  • 我不认为使用您的架构使用单个查询可以执行您所要求的操作。 您应该记住的一件事是始终将Solr索引视为单个非规范化表。 这有时是一个挑战,有时您可能必须强制为每种数据使用不同的索引。 对于您的问题,也许有这样的架构可能会有所帮助: P39126 Smith John Abnormaliti ...
  • 我相信你正在寻找这样的东西: SQL: SELECT * FROM books WHERE id IN (SELECT bookId FROM bookauthors WHERE authorId IN (SELECT authorId FROM author WHERE author.name LIKE '%Rowl ...
  • 这里有一篇很好的文章将帮助您完成PHP和SOLR的集成: http://www.ibm.com/developerworks/opensource/library/os-php-apachesolr/ SOLR有许多PHP接口,该文章引用了PHP SOLR客户端: http://code.google.com/p/solr-php-client/ 但也有这个: http://pecl.php.net/package/solr There's a good article here that will hel ...