Могу ли я вернуть значения полей нескольких документов в запросе Solr? - PullRequest
1 голос
/ 21 сентября 2011

Предположим, у меня есть следующие поля в схеме документа:

<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" />

В документе А есть следующие значения для перечисленных полей:

  • id: "все равно"
  • тип: "SalesOrder"
  • referenceDataValues: ["abcdefg", "hijklmn", "opqrst"]
  • текст: ["do", "not", "care", "any"]

Документ B имеет следующие значения:

  • id: "not care"
  • тип: "SalesOrder"
  • referenceDataValues: ["hijklmn", "opqrst"]
  • текст: ["red", "paint"]

Документ C имеет следующие значения:

  • id: "abcdef"
  • тип: "Customer"
  • referenceDataValues: (null)
  • text: ["hello", "world", "как "," я "," делаю "]

Документ D имеет следующие значения:

  • id:" hijklmn "
  • тип:" Клиент"
  • referenceDataValues: (null)
  • text: [" hello "," world "," how "," ya "," working "]

По умолчанию поиск выполняется только в текстовом поле.

Если пользователь вводит запрос «SalesOrder red paint Customer hello world», я хочу создать запрос Solr, который возвращает только Document B. То есть, получите (SalesOrders, чей текст имеет красный ИЛИ paint), кто ссылается на клиентов, чьитекст имеет привет ИЛИ мир

Алгоритм достижения этого будет выглядеть так:

Сначала результаты этого запроса:

q = "привет мир" & fq = type: Customer & fl = id

, который будет представлять собой документы C и D, содержащие только идентификаторы.Однако на самом деле я хочу получить эти значения в каждом из полей идентификатора, а не в документах, чтобы я мог видеть, существуют ли они в полях referenceDataValues ​​в документах SalesOrders.

q ="красная краска" & fq = тип: SalesOrder & fq = referenceDataValues: (вложите здесь значения идентификатора из предыдущего запроса)

Можно ли вернуть значения полей идентификатора в первом запросе?Если да, как будет выглядеть синтаксис для этого вложенного запроса?

Сейчас запрос, который я пытаюсь использовать, выглядит следующим образом:

q=red paint&start=0&rows=25&fq=type:SalesOrder&fq=referenceDataValues:(_query_:"{!lucene fq=type:CustomerPartyMaster&fl=id} hello world")

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

Вы пробовали параметр FieldList ??

Вы можете указать, какие поля должен возвращать ваш запрос, а затем просто выполнить второй запрос, где вы фильтруете по referenceDataValues: returnID

Но вам нужно проверить, как это работает (я думаю о производительности), когда результат первого запроса содержит множество идентификаторов.

0 голосов
/ 21 сентября 2011

То, что вы пытаетесь достичь, это своего рода объединение идентификаторов. Идентификатор документа C и D является внешним ключом в значениях справочных данных для документа A и B

Вы можете проверить патч присоединения - https://issues.apache.org/jira/browse/SOLR-2272

Если это не сработает, вы можете в конечном итоге проиндексировать документы и их справочные данные как единое целое, чтобы вы могли осуществлять поиск по ним и соответствующим образом фильтровать.

...