假设我在文档架构中有这些字段:
<field name="id" type="string" indexed="true" stored="true" multiValued="false" />
<field name="type" type="string" indexed="true" stored="true" multiValued="false" />
<field name="referenceDataValues" type="string" indexed="true" stored="true" multiValued="true" />
<field name="text" type="text" indexed="true" stored="false" multiValued="true" />
文档A列出了所列字段的值:
文件B具有以下价值:
文档C具有以下值:
文档D具有以下值:
默认搜索仅在文本字段上。
如果用户输入查询“SalesOrder red paint Customer hello world”,我想构建一个仅返回文档B的Solr查询。意思是,让我(引用其文本为红色或油漆的SalesOrders)引用其客户的文字有你好OR世界
达到此目标的算法如下:
首先,这个查询的结果:
q =“hello world”&amp; fq = type:Customer&amp; fl = id
这将是文件C和D,仅包含ID。但是,我想在每个id字段中实际获得这些值,而不是文档,因此我可以看到它们是否存在于SalesOrders文档的referenceDataValues字段中。
q =“red paint”&amp; fq = type:SalesOrder&amp; fq = referenceDataValues :(此处嵌套来自上一个查询的id值)
是否可以在第一个查询中返回ID字段的值?如果是,那么这个嵌套查询的语法是什么样的?
现在,我尝试使用的查询如下所示:
q=red paint&start=0&rows=25&fq=type:SalesOrder&fq=referenceDataValues:(_query_:"{!lucene fq=type:CustomerPartyMaster&fl=id} hello world")
答案 0 :(得分:0)
您要实现的目标是对ID的一种联接。文档C和D的id作为文档A和B的参考数据值中的外键
您可能想查看加入补丁 - https://issues.apache.org/jira/browse/SOLR-2272
如果它不起作用,您可能最终将文档及其参考数据编入索引作为单个实体,以便您可以搜索并相应地过滤。
答案 1 :(得分:0)
您是否尝试过FieldList parameter ??
您可以指定查询应返回的字段,然后执行第二个查询,您可以通过referenceDataValues进行过滤:returnedID
但是当第一个查询的结果包含大量ID时,你需要测试它是如何工作的(我在思考性能)。