2015-07-23 3 views
1

Это только пример, но это поможет мне получить дальнейшееSolr + schema.xml создания пользовательских FieldType объектов

У меня есть объект «человек» с поля [Возраст, Имя]

моей схеме .xml

<field name="age" type="string" indexed="true" stored="false"/> 
<field name="name" type="string" indexed="true" stored="false"/> 

все в порядке, но я хочу, чтобы добавить больше +1 поля "отношения" (или родители, дети и т.д.) Person [возраст, имя, отношение] -> связь имеет также [ возраст, название]

Как я могу вставить отношение FieldType к моему schema.xml?

<field name="age" type="string" indexed="true" stored="false"/> 
<field name="name" type="string" indexed="true" stored="false"/> 
<field name="relation" type="???" indexed="true" stored="false"/> 

Я хочу, чтобы добавить поле, которое принимает все существующие поля, как выше

<field name="field1" type="string"> 
<field name="field2" type="string"> 
<field name="field3" type="string"> 
<field name="field4" type="field1,field2,field3"> 

ответ

1

Solr действительно не поддерживает то, что вы хотите, так что вы, вероятно, либо индекс его многозначного поля который содержит идентификаторы, которые указывают на другие документы, такие как (какой-либо причине, почему поле возраст является строкой, а не INT):

<field name="id" type="int" indexed="true" stored="false"/> 
<field name="age" type="string" indexed="true" stored="false"/> 
<field name="name" type="string" indexed="true" stored="false"/> 
<field name="relation" type="int" multiValued="true" indexed="true" stored="false" /> 

.., а затем запросить все документы с заданным соотношением при ОТОБРАЖЕНИЕ g документ (два запроса к Solr).

Вы можете also use nested child documents, но для этого требуется немного больше обработки (поскольку все содержится в одном документе, вам придется обновлять все вместе).

+0

Это была ошибка, возраст должен быть int. Идея хранить Id очень умна. Я попробую. И раньше я видел вложенные дочерние документы, но они не объясняют, какой тип fieldType они используют. – kelkitian

+0

Они используют тот же тип поля, что и остальные индексы. Они индексируются в том же ядре, что и документы, такие как «родительские» документы, но «присоединяются» к блоку при запросе и индексировании. Если вы посмотрите на приведенный выше пример, вы увидите, что их идентификаторы различны для каждого документа или вспомогательного документа. – MatsLindh

0

Solr предпочитает, чтобы все было в денормализованном порядке. Многозначное значение находится в этом направлении. Но, как сказал @MatsLindh, он включает в себя 2 запроса, поскольку в большинстве случаев дочерние объекты будут больше, чем просто одно поле (массивы строк v/s массива сущностей).

(Родитель и ребенок в вашем случае - это лицо и «отношение») Вложенные дочерние документы, более объектные отношения, так же, как и в других рамках. У вас есть родительские документы, у вас есть дочерние документы, а solr поддерживает отношения, и у нас должно быть поле, которое идентифицирует родителя от дочернего. Хорошая часть об этом

  1. Вы можете получить родительский документ с дочерним полем, соответствующим
  2. Всех дочерних документами для родительского поля сопоставления
  3. Наконец только один запроса

гнездового материала, в последнее время дополнение. Мы используем прозрачные работы для взаимодействия с solr. Они предложили не использовать вложенные документы, поэтому мы оказались многозначными. Но если это разрешено в вашей инфраструктуре, а сама структура solr имеет эту функцию, я думаю, что нет смысла использовать ее.

Смежные вопросы