假设我在文档模式中有这些字段:
<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 列出的字段具有以下值:
- id:“不在乎”
- 类型:“销售订单”
- 参考数据值:[“abcdefg”,“hijklmn”,“opqrst”]
- 文本:[“做”、“不”、“关心”、“要么”]
文档 B 具有以下值:
- id:“不在乎”
- 类型:“销售订单”
- 参考数据值:[“hijklmn”,“opqrst”]
- 文字:[“红色”,“油漆”]
文档 C 具有以下值:
- 编号:“abcdef”
- 类型:“客户”
- 参考数据值:(空)
- 文本:[“你好”,“世界”,“如何”,“雅”,“做”]
文档 D 具有以下值:
- id: "hijklmn"
- 类型:“客户”
- 参考数据值:(空)
- 文本:[“你好”,“世界”,“如何”,“雅”,“做”]
默认搜索仅在文本字段上。
如果用户输入查询“SalesOrder red paint Customer hello world”,我想构建一个仅返回 Document B 的 Solr 查询。意思是,给我(SalesOrders which text have red OR paint)引用文本有hello的客户或世界
达到此目的的算法如下:
首先,这个查询的结果:
q="你好世界"&fq=type:客户&fl=id
这将是文档 C 和 D,仅包含 ID。但是,我想在每个 id 字段而不是文档中实际获取这些值,因此我可以查看它们是否存在于 SalesOrders 文档的 referenceDataValues 字段中。
q="red paint"&fq=type:SalesOrder&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")