Какой тип данных SQL следует использовать для заполнения поля Solr location (spatial) при использовании DataImportHandler?

у меня есть схема Solr, которая содержит location поле (по умолчанию solr.LatLonType ):

<field name="latlng" type="location" indexed="true" stored="true"/>

и я пытаюсь заполнить его с помощью DataImportHandler. В Настоящее Время Я SELECT значение как nvarchar в формате 17.74628,-64.70725; однако он не заполняет поле Solr (оно остается пустым).

в каком типе и формате должен находиться этот столбец для обновления location поле в Solr?

2 ответов


solr.LatLonType является многомерным типом; тип поля можно определить как:

<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

используя ваше имя поля "latlng", схема для полей координат будет выглядеть так (Обратите внимание на" subFieldSuffix", используемый для 2-мерного поля типа solr.LatLonType):

<field name="latlng" type="location" indexed="true" stored="true" />
<field name="latlng_0_coordinate" type="double" indexed="true" stored="true" />
<field name="latlng_1_coordinate" type="double" indexed="true" stored="true" />

" latlng_0_coordinate "должно быть широтой, а" latlng_1_coordinate " - долготой. Инструкция select должна загружать "latlng_0_coordinate" и " latlng_1_coordinate" как двойники.


предыдущий ответ работает, так как вы вручную создаете поля, которые Solr использует для хранения lat и long индивидуально, однако для этой цели есть динамическое поле.

<!-- Type used to index the lat and lon components for the "location" FieldType --> <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false" />

Если вы проверите тип поля location, вы можете обнаружить, что он использует суффикс _coordinate для своих значений:

<!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->

<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

это работает для меня в Solr 4 beta, и я считаю, что присутствует с Solr 3.6 или даже старше. В любом случае, просто еще одно решение!

надеюсь, что это помогает.