Предположим, у меня есть эти поля в схеме документа:
<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: "все равно"
- тип: "Заказ на продажу"
- referenceDataValues: ["abcdefg", "hijklmn", "opqrst"]
- текст: ["делать", "не", "заботиться", "либо"]
Документ B имеет следующие значения:
- id: "все равно"
- тип: "Заказ на продажу"
- referenceDataValues: ["hijklmn", "opqrst"]
- текст: ["красный", "краска"]
Документ C имеет следующие значения:
- идентификатор: "abcdef"
- тип: "Клиент"
- referenceDataValues: (нулевой)
- текст: ["привет", "мир", "как", "я", "делаю"]
Документ D имеет следующие значения:
- идентификатор: "hijklmn"
- тип: "Клиент"
- referenceDataValues: (нулевой)
- текст: ["привет", "мир", "как", "я", "делаю"]
Поиск по умолчанию осуществляется только в текстовом поле.
Если пользователь вводит запрос «SalesOrder красная краска, клиент, привет, мир», я хочу создать запрос Solr, который возвращает только документ B. Это означает, что вы получите (SalesOrders, текст которых имеет красный цвет ИЛИ краска), которые ссылаются на клиентов, чей текст имеет привет ИЛИ мир
Алгоритм достижения этого будет таким:
Во-первых, результаты этого запроса:
q="привет, мир"&fq=type:Customer&fl=id
которые будут документами C и D, содержащими только идентификаторы. Однако я хочу получить эти значения в каждом из полей идентификатора, а не в документах, чтобы увидеть, существуют ли они в полях referenceDataValues в документах SalesOrders.
q="красная краска"&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")